Как проверить, содержит ли многомерный массив только пустые значения?


Я огляделся и не могу найти ответ на этот вопрос, поэтому мне интересно, есть ли у меня такой массив..

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

Как я могу проверить, все ли значения пусты? Я попытался сделать следующее:

if (empty($array['foo']['bar'])) {
    // Array empty
}
Но, как и ожидалось, это не сработало.

Как я могу это сделать?

3 2

3 ответа:

Если вы хотите проверить, все ли значения, где заполнены, вы можете использовать

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

Для того, что вы хотите сделать, хотя вы могли бы использовать array reduce с закрытием

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

Примечание это будет работать только в php 5.3+

$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']

Короткой альтернативой было бы:

if (empty(implode($array['foo']['bar']))) {
  // is empty
}
Обратите внимание, что некоторые единичные значения могут рассматриваться как пустые. Смотрите empty () .