Как я могу проверить массив рекурсивно для пустого содержимого, как этот пример:
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