php - 过滤递归数组并仅删除 NULL 值

标签 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 !== '');
   }

}

$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_maparray_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/

相关文章:

php - 从 php 调用 python 有 2 个返回值

php - Jqgrid + 代码点火器

php - 嵌套集模型是否适用于具有多个类别(多对多)的文章?

arrays - Powershell |数组获取最长的字符串

javascript - 用递归反转字符串

javascript - 将两个或多个提交按钮合二为一

javascript - 在嵌套 jquery 数组中查找值

java - 迭代器 hasext 给出第二个值

Haskell递归列表理解导致C VoidCC VoidCC

Java:二叉搜索树递归的最小深度