迭代一个对象...... 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"
}
答案 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