如何检查对象值=空数组?

时间:2014-05-09 23:04:01

标签: php arrays object iteration is-empty

迭代一个对象...... API响应......出于某些奇怪的原因,某些空值将作为一个空数组出现......即

$foo->bar = array() 

$foo->bar = array(0)

但是当我尝试检查时:

if ( empty($foo->bar) )

甚至:

if ( is_array($foo->bar) )

它没有抓住它。我一直在将整个对象转换为一个数组来解决这个问题,这可以解决这个问题,但这会影响性能。

我有什么东西在这里失踪吗?

编辑:

回过头来,看起来我把我的阵列与我的对象混在了一起。我需要检查的是响应中的空值,例如:

[1] => SimpleXMLElement Object
    (
        [RecordID] => 14
        [SomethingID] => 1
        [SomethingName] => OKAY
        [Integer] => 0
        [String] => String
        [AnotherInteger] => 1
        [Empty] => SimpleXMLElement Object
            (
            )

        [SomethingElseID] => 0
    )

如何检查$ object-> Empty是否为EMPTY?

编辑:

var_dump显示:

object(SimpleXMLElement)#1343 (8) { 

    ["RecordID"]=> string(2) "14" 
    ["SomethingID"]=> string(1) "1" 
    ["SomethingName"]=> string(4) "OKAY" 
    ["Integer"]=> string(1) "0" 
    ["String"]=> string(6) "String" 
    ["AnotherInteger"]=> string(1) "1" 
    ["Empty"]=> object(SimpleXMLElement)#1355 (0) { } 
    ["SomethingElseID"]=> string(1) "0" 

}

3 个答案:

答案 0 :(得分:2)

使用empty($array)docs)确定数组是否为空。

修改

是的,我注意到OP声称他使用了empty(),但你总是可以这样做:

function isArrayEmpty($arr) {
   return (count($arr) == 0);
}

用于验证目的。 empty()(理论上)是要走的路。并且您可以随时使用var_dump()print_r()来检查empty()声明数组在您打赌时应该为空的原因。

@chameleon的回答也引导我:https://bugs.php.net/bug.php?id=24915 - 如果您的班级使用的是__get(),那么使用count()代替empty()可能是解决方法。

答案 1 :(得分:0)

您也可以使用foreach来确定数组是否为空,尽管我推荐@ Marcin的方法

foreach($array as $key => $value){
  if(empty($value)){
    unset($array[$key]);
  }
}

答案 2 :(得分:0)

如果您的对象使用神奇的__get()函数来访问对象的属性,那么empty()检查将失败,除非您使用的是PHP 5.5+。

来自文档:

Prior to PHP 5.5, empty() only supports variables; anything else will result in 
a parse error. In other words, the following will not work: empty(trim($name)).

如果你使用神奇的方法来访问属性,就像做空($ object-> __ get($ property))

编辑:请注意,尽管文档提到它会导致解析错误,但我从未真正看到它导致PHP错误,我相信它只会返回false