2

我环顾四周,找不到答案,所以我想知道我是否包含这样的数组..

$array['foo']['bar'][1] = '';
$array['foo']['bar'][2] = '';
$array['foo']['bar'][3] = '';
$array['foo']['bar'][4] = '';

如何检查所有值是否为空?我尝试执行以下操作:

if (empty($array['foo']['bar'])) {
    // Array empty
}

但正如预期的那样,这并没有奏效。

我怎样才能做到这一点?

4

3 回答 3

3

如果您想检查是否可以使用所有已填充的值

 if(call_user_func_array("isset", $array['foo']['bar']))

对于您想要做的事情,尽管您可以使用带有闭包的数组 reduce

 if(array_reduce($array, function(&$res, $a){if ($a) $res = true;}))

请注意,这仅适用于 php 5.3+

于 2013-07-06T19:22:55.667 回答
1

$array['foo']['bar']不是空的,因为它实际上是array(1=>'',2=>'',3=>'',4=>'').

您需要对其进行foreach循环以检查它是否确实为空。

$arr_empty = true;
foreach ($array['foo']['bar'] as $arr) {
    if (!empty($arr)) {
        $arr_empty = false;
    }
}
//$arr_empty is now true or false based on $array['foo']['bar']
于 2013-07-06T19:21:50.907 回答
1

一个简短的替代方案是:

if (empty(implode($array['foo']['bar']))) {
  // is empty
}

请注意,某些单个值可能被视为空。见空()

于 2015-07-15T00:43:23.863 回答