Лучший способ проверить пустой массив?

Как я могу проверить массив рекурсивно для пустого содержимого, как в этом примере:

Array
(
    [product_data] => Array
        (
            [0] => Array
                (
                    [title] => 
                    [description] => 
                    [price] => 
                )

        )
    [product_data] => Array
        (
            [1] => Array
                (
                    [title] => 
                    [description] => 
                    [price] => 
                )

        )

)

Массив не пуст, но нет содержимого. Как я могу проверить это с помощью простой функции?

Спасибо!!

Ответ 1


function is_array_empty($InputVariable)
{
   $Result = true;

   if (is_array($InputVariable) && count($InputVariable) > 0)
   {
      foreach ($InputVariable as $Value)
      {
         $Result = $Result && is_array_empty($Value);
      }
   }
   else
   {
      $Result = empty($InputVariable);
   }

   return $Result;
}

Ответ 2

Решение с помощью array_walk_recursive:

function empty_recursive($value)
{
        if (is_array($value)) {
                $empty = TRUE;
                array_walk_recursive($value, function($item) use (&$empty) {
                        $empty = $empty && empty($item);
                });
        } else {
                $empty = empty($value);
        }
        return $empty;
}

Ответ 3

Если ваш массив находится только на одном уровне, вы также можете:

if (strlen(implode('', $array)) == 0)

Работает в большинстве случаев:)

Ответ 4

Предполагая, что массив всегда будет содержать один и тот же тип данных:

function TestNotEmpty($arr) {
    foreach($arr as $item)
        if(isset($item->title) || isset($item->descrtiption || isset($item->price))
            return true;
    return false;
}

Ответ 5

Короткое замыкание включено.

function hasValues($input, $deepCheck = true) {
    foreach($input as $value) {
        if(is_array($value) && $deepCheck) {
            if($this->hasValues($value, $deepCheck))
                return true;
        }
        elseif(!empty($value) && !is_array($value))
            return true;
    }
    return false;
}

Ответ 6

Вот моя версия. Как только он найдет непустую строку в массиве, она прекратится. Плюс он правильно проверяет пустые строки, так что 0 (ноль) не считается пустой строкой (которая была бы, если вы использовали функцию empty()). Кстати, даже использование этой функции только для строк оказалось бесценным с годами.

function isEmpty($stringOrArray) {
    if(is_array($stringOrArray)) {
        foreach($stringOrArray as $value) {
            if(!isEmpty($value)) {
                return false;
            }
        }
        return true;
    }

    return !strlen($stringOrArray);  // this properly checks on empty string ('')
}

Ответ 7

Если кто-то наткнулся на этот вопрос и должен проверить, является ли весь массив NULL, что означает, что каждая пара в массиве равна нулю, это удобная функция. Вы можете очень легко изменить его, чтобы вернуть true, если какая-либо переменная также возвращает NULL. Мне нужно было это для определенной веб-формы, где она обновляла данные пользователей, и было возможно, что она прошла через полностью пустой, поэтому не нужно делать SQL.

$test_ary = array("1"=>NULL, "2"=>NULL, "3"=>NULL);

function array_empty($ary, $full_null=false){
    $null_count = 0;
    $ary_count = count($ary);

    foreach($ary as $value){
        if($value == NULL){
            $null_count++;
        }
    }

    if($full_null == true){
        if($null_count == $ary_count){
            return true;
        }else{
            return false;
        }
    }else{
        if($null_count > 0){
            return true;
        }else{
            return false;
        }
    }
}

$test = array_empty($test_ary, $full_null=true);
echo $test;

Ответ 8

$arr=array_unique(array_values($args));
if(empty($arr[0]) && count($arr)==1){
 echo "empty array";
}

Ответ 9

Возвращает TRUE, если передана переменная, отличная от массива, или если какой-либо из вложенных массивов содержит значение (включая значения фальши!). Возвращает FALSE в противном случае. Короткие замыкания.

function has_values($var) {
  if (is_array($var)) {
    if (empty($var)) return FALSE;
    foreach ($var as $val) {
      if(has_values($val)) return TRUE;
    }
    return FALSE;
  } 
  return TRUE;
}

Ответ 10

Здесь хорошая функция полезности, которая вернет true (1), если массив пуст, или false (0), если нет:

function is_array_empty( $mixed ) {
    if ( is_array($mixed) ) {
        foreach ($mixed as $value) {
            if ( ! is_array_empty($value) ) {
                return false;
            }
        }
    } elseif ( ! empty($mixed) ) {
        return false;
    }

    return true;
}

Например, если задан многомерный массив:

$products = array(
    'product_data' => array(
        0 => array(
            'title' => '',
            'description' => null,
            'price' => '',
        ),
    ),
);

Вы получите значение true, возвращенное с is_array_empty(), так как нет установленных значений:

var_dump( is_array_empty($products) );

Открыть этот код в интерактивном режиме по адресу: http://codepad.org/l2C0Efab