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


Getting "Warning: Invalid argument supplied for foreach()" when I have two foreach

我有以下代码:

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