我有一个对象数组。我需要循环遍历这些对象(最好没有foreach()
,如果对象中的某个键不为空,则返回true,否则返回false。
例如,
$items = array(
'0' => stdClass {
name => Ryan
suppliers => array()
}
'1' => stdClass {
name => Dave
suppliers => array(
'0' => stdClass {}
)
}
)
基本上,我需要遍历数组并检查对象的“供应商”键,如果任何 为空,则返回true表示整件事,否则返回假。
答案 0 :(得分:3)
foreach
出了什么问题?
$check = function($arr) {
foreach($arr as $o) {
if (!empty($o->suppliers)) return true;
}
return false;
};
如果您只想在一个地方使用它,请使用匿名功能
我不明白为什么你不想使用foreach,因为事情是 - foreach
只是正确的方法,因为你在找到值后立即离开循环
答案 1 :(得分:0)
您可以过滤并检查结果:
smbclient
如果你真的想要一个布尔值:
if(array_filter($items, function($v) { return !empty($v->suppliers); })) {
//at least one not empty
} else {
//all are empty
}
答案 2 :(得分:0)
另一个选项是将数组减少为布尔值。
array_reduce($items, function($hasSupplier, $item) {
return !empty($item->suppliers) || $hasSupplier;
});
尽管如此,我更喜欢foreach
解决方案,因为它不会不必要地继续迭代。