Php 获得;警告:为foreach()提供的参数无效;当我每人有两张票的时候

Php 获得;警告:为foreach()提供的参数无效;当我每人有两张票的时候,php,Php,我有以下代码: if ($login->messages || $content->messages) { echo '<div id="message">'; foreach ($login->messages as $message) { echo $message; } foreach ($content->messages as $message) { echo $message; }

我有以下代码:

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>';
}
if($login->messages | |$content->messages){
回声';
foreach($login->messages as$message){
回声$信息;
}foreach($content->messages as$message){
回声$信息;
}
回声';
}
其中,$login->messages和$content->messages都是可能为空的数组。当$login->messages为空而$content->messages为空时,一切正常,$content->messages中的消息会显示。但是,当$login->messages中有内容而$content->messages为空时,会显示登录消息,然后在消息下出现错误“警告:为foreach()in提供的参数无效”。我不知道我做错了什么


谢谢。

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

我会用
var|u dump()
查看它们的类型。

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

是否使用条件
进行检查,然后继续使用两个变量

if ($login->messages || $content->messages)
如果
$messages
包含数据,则语句将返回
true

您应该使用
检查这两个值是否都为空

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>';
}
if($login->messages | |$content->messages){
回声';
foreach((数组)$login->messages as$message){
回声$信息;
}foreach((数组)$content->messages as$message){
回声$信息;
}
回声';
}
当其中一个或两个变量都是空数组时,此代码不会引发任何警告。逻辑结论:它们不是空数组,而是其他东西。