检查 stdClass 对象在 PHP 中是否有“条目”

php
2022-08-30 11:25:52

我有一个模型,可以检查数据库中的条目。喜欢这个:

public function getByID($id)
{
    if(false == is_numeric($id))
        return false;

    $images = array();

    $query = $this->db->where("id_album", $id)->order_by("order", "ASC")->get("images");

    foreach($query->result() as $row)
        $images[] = $row;

    return (object) $images;
}

在我看来,我想知道我是否有行,以显示图像。我这样做:

<?php if(false != isset($content->images)): ?>
    <pre><?php print_r($content->images); ?></pre>
<?php endif; ?>

但是每次我在没有结果时尝试跳过(我得到一个stdClass()空),我都失败了。我试过了。。。我不知道如何跳过“严重性:通知消息:未定义的变量”。isset$content->images != NULL!$content->images

提前感谢您。

更新:

$content具有比图像更多的集,如 或 。$content->_data$content->title

当我在数据库上没有图像并且我没有从MySQL返回时,请执行以下操作:

<?php echo count($content->images); ?>
<pre><?php print_r($content->images); ?></pre>

输出为:

1
stdClass ( )

答案 1

为什么你不能直接使用

if(isset($content->images)) //Isset also will make sure $content is set
{

}

这样,您就可以对两个实体执行检查。

由于图像是可以迭代的对象,因此您也可以对其进行检查。

if(isset($content->images) && is_object($content->images))
{

}

此外,您似乎对布尔值使用了错误的比较运算符,您应该使用严格的比较标准,这是和不是,或者不是:)=====!==!=

圣诞快乐


答案 2

我知道这是一个老问题,但它仍然没有得到正确的回答。

isset 测试密钥是否存在而不测试密钥是否为 null。这是一个重要的区别。请参阅示例:http://us1.php.net/isset

要正确测试数组是否包含键,应按照本页其他位置的说明使用。array_key_exists

另一方面,若要测试对象是否包含属性,应使用 property_exists 方法。 即使属性具有值,也会返回。property_exists()TRUENULL

所以,你的代码应该看起来像这样(是的,我改变了一点,但重点保持不变):

<?php
    if ( isset( $content ) && property_exists( $content, 'images' ) ) {
        echo '<pre>' . print_r( $content->images, true ) . '</pre>';
    }
?>

推荐