Проверить, пуст ли массив без использования цикла?

Есть ли в PHP какая-либо функция для проверки, является ли массив пустым или как я могу сделать это без использования цикла?

Например: $b = array('key1' => '', 'key2' => '', 'key3' => '', 'key4' => '');

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

7 ответов

Решение

Просто:

function allEmpty($array)
{
    return empty(array_filter($array)); // (PHP < 5.3) or
    $array = array_filter($array); return empty($array); // (PHP >= 5.3) or just
    return array_filter($array) === array();
}

function someEmpty($array)
{
    return ($array !== array_filter($array));
}

Независимо от того, используете ли вы цикл или какую-либо функцию массива, вы по-прежнему просматриваете массив, поэтому сохраняйте его простым и просто проходите по массиву:

function isEmpty($arr) {
  foreach ($arr as $k => $v) {
    if ($v) {
      return false;
    }
  }
  return true;
}

В зависимости от того, что вы хотите определить как пустое, вы можете проверить только пустые строки:

function isEmpty($arr) {
  foreach ($arr as $k => $v) {
    if ($v === '') {
      return false;
    }
  }
  return true;
}

Если это конкретный массив, который вы хотите проверить (то есть: он имеет только key=>values ​​и пусто всегда key=>'') ...

$b = array('key1' => '', 'key2' => '', 'key3' => '', 'key4' => '');
$temp = array_flip($b);
if(count($temp) === 1 && empty($temp[0])){
    echo 'empty';
}

В противном случае вам придется использовать цикл... извините.

Если вы хотите проверить наличие пустых строк '' Вы можете использовать in_array

if(!in_array('', $array)) echo 'array doesn’t contain empty strings';
if(in_array('', $array)) echo 'array does contain at least one empty string';

Вы также можете попробовать http://php.net/array_filter с пустым методом обратного вызова и сравнить его с пустым массивом (или использовать empty()):

if(empty(array_filter($array))) echo 'array only contains values evaluating to false';

Проще говоря, нет.

Если вы не хотите делать буквальный foreach/for/while, вы можете использовать array_walk.

Я обычно проверяю это, используя следующее условие:

if(is_array($array) and count($array)) {
 //  ... code here ...
}

Это все.

Просто

if(!array_filter($array)){
  //Is empty
}
else
{
  //Is not empty
}

выполнять работу.

Другие вопросы по тегам