如何以递归方式检查数组中的空内容,如下例所示:
Array
(
[product_data] => Array
(
[0] => Array
(
[title] =>
[description] =>
[price] =>
)
)
[product_data] => Array
(
[1] => Array
(
[title] =>
[description] =>
[price] =>
)
)
)
数组不为空但没有内容。如何通过简单的功能来检查?
感谢!!
答案 0 :(得分:15)
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;
}
答案 1 :(得分:10)
如果您的阵列只有一个级别,您也可以这样做:
if (strlen(implode('', $array)) == 0)
在大多数情况下都适用:)
答案 2 :(得分:7)
使用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 :(得分:2)
假设数组将始终包含相同类型的数据:
function TestNotEmpty($arr) {
foreach($arr as $item)
if(isset($item->title) || isset($item->descrtiption || isset($item->price))
return true;
return false;
}
答案 4 :(得分:2)
包括短路。
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;
}
答案 5 :(得分:2)
这是我的版本。一旦在数组中找到非空字符串,它就会停止。另外,它正确检查空字符串,因此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 ('')
}
答案 6 :(得分:0)
如果有人在这个问题上发现并且需要检查整个数组是否为NULL,这意味着数组中的每一对都等于null,这是一个方便的函数。如果任何变量也返回NULL,您可以非常轻松地修改它以返回true。我需要这个用于更新用户数据的某个Web表单,并且它可能完全空白,因此不需要执行任何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;
答案 7 :(得分:0)
$arr=array_unique(array_values($args));
if(empty($arr[0]) && count($arr)==1){
echo "empty array";
}
答案 8 :(得分:0)
如果传递的数据不是数组,或者任何嵌套数组包含一个值(包括falsy值!),则返回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;
}
答案 9 :(得分:0)
这是一个很好的效用函数,如果数组为空,将返回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
答案 10 :(得分:0)
我需要一个函数来为非空值递归过滤数组。
这是我的递归函数:
function filterArray(array $array, bool $keepNonArrayValues = false): array {
$result = [];
foreach ($array as $key => $value) {
if (is_array($value)) {
$value = $this->filterArray($value, $keepNonArrayValues);
}
// keep non empty values anyway
// otherwise only if it is not an array and flag $keepNonArrayValues is TRUE
if (!empty($value) || (!is_array($value) && $keepNonArrayValues)) {
$result[$key] = $value;
}
}
return array_slice($result, 0)
}
使用参数$keepNonArrayValues
,您可以决定是否将0
(数字零),''
(空字符串)或false
(布尔型FALSE)的值保留在数组。换句话说:如果$keepNonArrayValues = true
仅将空数组从目标数组中删除。
array_slice($result, 0)
具有重新排列数字索引(0..length-1)的作用。
此外,通过此函数过滤数组后,可以使用empty($filterredArray)
对其进行测试。