如何从PHP中的多维数组中删除空值?

Ric*_*-MX 9 php string filtering multidimensional-array isnullorempty

我一直在寻找很多答案,但没有一个能为我工作.

这是分配给我的$quantities数组的数据:

Array(
    [10] => Array([25.00] => 1)
    [9] => Array([30.00] => 3)
    [8] => Array([30.00] => 4)
    [12] => Array([35.00] => )
    [1] => Array([30.00] => )
    [2] => Array([30.00] => )
)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来删除具有空值的子数组,[12] [1][2]保留其他所有内容.

期望的结果:

Array(
    [10] => Array([25.00] => 1)
    [9] => Array([30.00] => 3)
    [8] => Array([30.00] => 4)
)
Run Code Online (Sandbox Code Playgroud)

我在官方php文档上尝试了很多功能,但没有一个能够工作.

我用过这个:

function array_filter_recursive($array, $callback = null) {
    foreach ($array as $key => & $value) {
        if (is_array($value)) {
            $value = array_filter_recursive($value, $callback);
        } else {
            if ( ! is_null($callback)) {
                if ( ! $callback($value)) {
                    unset($array[$key]);
                }
            } else {
                if ( ! (bool) $value) {
                    unset($array[$key]);
                }
            }
        }
    }
    unset($value);
    return $array;
}
Run Code Online (Sandbox Code Playgroud)

但它只删除了子阵列中的元素; 我需要完全删除子阵列.

我不想要这个:

Array(
    [10] => Array([25.00] => 1)
    [9] => Array([30.00] => 3)
    [8] => Array([30.00] => 4)
    [12] => Array()
    [1] => Array()
    [2] => Array()
)
Run Code Online (Sandbox Code Playgroud)

小智 12

有点晚,但可能会帮助某人寻找相同的答案.我用这个非常简单的方法;

  1. 然后从包含无值的嵌套数组中删除所有键
  2. 删除所有空的嵌套数组.

$postArr = array_map('array_filter', $postArr);
$postArr = array_filter( $postArr );
Run Code Online (Sandbox Code Playgroud)


Rez*_*mun 6

以下功能适用于我的情况。我们可以使用一个简单的递归函数从多维 PHP 数组中删除所有空元素:

function array_filter_recursive($input){
    foreach ($input as &$value){
        if (is_array($value)){
            $value = array_filter_recursive($value);
        }
    }
    return array_filter($input);
}
Run Code Online (Sandbox Code Playgroud)

然后我们只需要调用这个函数:

$myArray = array_filter_recursive($myArray);
Run Code Online (Sandbox Code Playgroud)