我想从递归数组中删除所有 null 或空白值,但不删除 false 和 0 值。
function isNotNull($val) {
if(is_array($val)) {
$ret = array_filter($val, 'isNotNull');
return $ret;
} else {
return (!is_null($val) && $val !== '');
}
}
$arr = array_filter($arr, 'isNotNull');
输入:
$arr = array(
"stringKey" => "Abc",
"boolKey" => false,
"zeroKey" => 0,
"blankKey" => '',
"newArr" => array(
"stringKey2"=>"Abc2",
"boolKey2"=>false,
"zeroKey2" => 0,
"blankKey2"=>"",
"blankArr" => array()
)
);
这给出输出:
Array
(
[stringKey] => Abc
[boolKey] =>
[zeroKey] => 0
[newArr] => Array
(
[stringKey2] => Abc2
[boolKey2] =>
[zeroKey2] => 0
[blankKey2] =>
[blankArr] => Array
(
)
)
)
但我想输出以下内容:
Array
(
[stringKey] => Abc
[boolKey] =>
[zeroKey] => 0
[newArr] => Array
(
[stringKey2] => Abc2
[boolKey2] =>
[zeroKey2] => 0
)
)
我使用了带有回调函数的 array_filter,但它只过滤简单数组而不是多维数组。我不想使用循环。
最佳答案
您可以将 array_map
和 array_filter
组合在一个递归调用的函数中。像这样的东西可能对你有用。
function filterNotNull($array) {
$array = array_map(function($item) {
return is_array($item) ? filterNotNull($item) : $item;
}, $array);
return array_filter($array, function($item) {
return $item !== "" && $item !== null && (!is_array($item) || count($item) > 0);
});
}
关于php - 过滤递归数组并仅删除 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466419/