Kri*_*dav 5 php arrays recursion multidimensional-array
我想从递归数组中删除所有null或空白值,但不删除false和0值。
function isNotNull($val) {
if(is_array($val)) {
$ret = array_filter($val, 'isNotNull');
return $ret;
} else {
return (!is_null($val) && $val !== '');
}
}
Run Code Online (Sandbox Code Playgroud)
$ 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()
)
);
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
Array
(
[stringKey] => Abc
[boolKey] =>
[zeroKey] => 0
[newArr] => Array
(
[stringKey2] => Abc2
[boolKey2] =>
[zeroKey2] => 0
[blankKey2] =>
[blankArr] => Array
(
)
)
)
Run Code Online (Sandbox Code Playgroud)
但我想吼叫输出:
Array
(
[stringKey] => Abc
[boolKey] =>
[zeroKey] => 0
[newArr] => Array
(
[stringKey2] => Abc2
[boolKey2] =>
[zeroKey2] => 0
)
)
Run Code Online (Sandbox Code Playgroud)
我将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);
});
}
Run Code Online (Sandbox Code Playgroud)