Yzk博客

php使用array_filter来过滤多维数组中的空值或空数组

今天在做一个功能的时候,提交的数组里含有空值,需要进行过滤,提交的数组是一个多维数组,按以往的办法我都是使用foreach来解决,这是一个效率很低的办法,于是今天就查了一下。找到一个php的函数array_filter。

array_filter :可以过滤数组中的空值,但是对多维数组无效。

然后又找到一个使用array_filter写的一个函数是这样的。

$a = array (array (), array (array (), 1, 2));
echo '<pre>';
print_r(array_no_empty($a));
exit();
function array_no_empty($arr) {
    if (is_array($arr)) {
        foreach ( $arr as $k => $v ) {
            if (empty($v)) unset($arr[$k]);
            elseif (is_array($v)) {
                $arr[$k] = array_no_empty($v);
            }
        }
    }
    return $arr;
}

但是使用的时候发现,该函数只能过滤数组里的空值,但是如果一个多维数组里某个数组的值都是空值,过滤后就会剩下一个空数组,

函数运行结果展示

于是对该函数进行了修改,就是在最后传值时进行一个判断,如果返回的数组不是空,就把返回的数组合并,如果返回的数组是空,就从原数组里该数组注销。

/**
 * 过滤多维数组中的空值和空数组
 * @param $arr
 * @return array
 */
function array_no_empty($arr) {
    if (is_array($arr)) {
        foreach ( $arr as $k => $v ) {
            if (empty($v)){
                unset($arr[$k]);
            }
            elseif (is_array($v)) {
                $ar = array_no_empty($v);
                if(!empty($ar)){
                    $arr[$k] = $ar;
                }else{
                    unset($arr[$k]);
                };
            }
        }
    }
    return $arr;
}

使用后效果如下:

函数运行结果展示

修改后得到的数据正好是我需要的结果。