1

我有以下代码:

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->messages 和 $content->messages 都是可能为空的数组。当 $login->messages 为空但 $content->messages 不为空时,一切正常并显示 $content->messages 中的消息 但是,当 $login->messages 有内容且 $content->messages 为空时,显示登录消息,然后我在消息下收到错误“警告:为 foreach() in 提供的参数无效”。我看不出我做错了什么。

谢谢你。

4

4 回答 4

3

要么$login->messages不是$content->messages数组。您可能认为它们是一个空数组 - 但实际上它们可能是false, null,''0

我会检查它们var_dump()以查看它们的类型。

于 2013-10-07T15:23:01.683 回答
0

您正在使用条件进行检查,OR然后继续使用这两个变量。

if ($login->messages || $content->messages)

true如果其中任何一个$messages包含数据,则该语句将返回。

您应该使用 . 检查两个值是否不为空AND

if ($login->messages && $content->messages)

更好的是类型检查:

if (is_array($login->messages) && is_array($login->messages))
于 2013-10-07T15:28:15.207 回答
0

if ($login->messages || $content->messages) 你为什么不检查 count() > 0

于 2013-10-07T15:23:33.533 回答
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>';
}
于 2013-10-07T15:30:51.110 回答