我有以下代码:
if ($login->messages || $content->messages) {
echo '<div id="message">';
foreach ($login->messages as $message) {
echo $message;
} foreach ($content->messages as $message) {
echo $message;
}
echo '</div>';
}
其中$login>消息和$content>消息都是可能为空的数组。当 $login->messages 为空但 $content->messages 不为空时,一切正常,并且显示 $content->messages 中的消息但是,当 $login->messages 有某些内容并且 $content->messages 为空时,将显示登录消息,然后我在消息下收到错误"警告:为 foreach() 提供的参数无效"。我不明白我做错了什么。
谢谢。
$login->messages
或 $content->messages
都不是数组。你可能认为它们是一个空数组 - 但它们实际上可能是false
、null
、''
或0
。
我会用var_dump()
检查它们以查看它们的类型。
if ($login->messages || $content->messages)你为什么不检查 count() 是否> 0
您正在使用条件OR
进行检查,然后继续使用这两个变量。
if ($login->messages || $content->messages)
如果任一$messages
包含数据,则该语句将返回true
。
您应该使用AND
检查这两个值是否都不为空。
if ($login->messages && $content->messages)
更好的是类型检查:
if (is_array($login->messages) && is_array($login->messages))
有几种方法可以检查数组是否为空。您还应用这种方式,这意味着如果您将任何值转换为数组,您将获得一个数组,无论它是什么值。例如 null,true,false 都会导致一个空数组。
if ($login->messages || $content->messages) {
echo '<div id="message">';
foreach ((array)$login->messages as $message) {
echo $message;
} foreach ((array)$content->messages as $message) {
echo $message;
}
echo '</div>';
}