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

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

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

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

Спасибо !!

 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; } 

Решение с помощью 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; } 

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

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

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

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

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

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

 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; } 

Вот моя версия. Как только он найдет непустую строку в массиве, она прекратится. Плюс он правильно проверяет пустые строки, так что 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 ('') } 

Если кто-то наткнулся на этот вопрос и должен проверить, является ли весь массив 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; 
 $arr=array_unique(array_values($args)); if(empty($arr[0]) && count($arr)==1){ echo "empty array"; } 

Возвращает 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; } 

Вот хорошая функция полезности, которая вернет 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