如果数组中的任何项为空/非空,则返回boolean

时间:2017-05-04 15:06:34

标签: php arrays

我有一个对象数组。我需要循环遍历这些对象(最好没有foreach(),如果对象中的某个键为空,则返回true,否则返回false。

例如,

$items = array(
    '0' => stdClass {
        name => Ryan
        suppliers => array()
    }
    '1' => stdClass {
        name => Dave
        suppliers => array(
            '0' => stdClass {}
        )
    }
)

基本上,我需要遍历数组并检查对象的“供应商”键,如果任何 为空,则返回true表示整件事,否则返回假。

3 个答案:

答案 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解决方案,因为它不会不必要地继续迭代。