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