当我有两个foreach时,获取“警告:为foreach()提供的参数无效”

时间:2013-10-07 15:20:25

标签: php

我有以下代码:

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()提供的无效参数”。我不明白我做错了什么。

谢谢。

4 个答案:

答案 0 :(得分:3)

$login->messages$content->messages不是数组。您可能认为它们是一个空数组 - 但实际上它们可能是falsenull''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>';
}