Проверить, является ли массив пустым без использования цикла? - PullRequest
1 голос
/ 26 августа 2009

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

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

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

Ответы [ 7 ]

14 голосов
/ 26 августа 2009

Simple:

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));
}
3 голосов
/ 26 августа 2009

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

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;
}
1 голос
/ 26 августа 2009

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

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

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

1 голос
/ 26 августа 2009

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

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

0 голосов
/ 05 сентября 2012

Простой

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

сделай работу.

0 голосов
/ 26 августа 2009

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

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

Вот и все.

0 голосов
/ 26 августа 2009

если вы хотите проверить наличие пустых строк '' вы можете использовать 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';

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

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