递归地从多维数组中删除空元素和子数组

我似乎找不到一个简单,直接的解决方案来解决PHP中从数组中删除空元素的古老问题。

我的输入数组可能如下所示:

Array ( [0] => Array ( [Name] => [EmailAddress] => ) ) 

(以此类推,如果有更多的数据,尽管可能没有...)

如果它看起来像上面,我希望它在处理后完全为空

输出也是如此:print_r($array);

Array ( )

如果我运行,我仍然得到相同的输出。然而,我所看到的任何地方都表明这是在PHP5中删除空数组元素的最简单方法。$arrayX = array_filter($arrayX);print_r

我也试过,但我得到以下错误:$arrayX = array_filter($arrayX,'empty_array');

警告:array_filter() [function.array-filter]:第二个参数“empty_array”应该是有效的回调

我做错了什么?


答案 1

尝试使用 array_map() 将滤镜应用于 中的每个数组:$array

$array = array_map('array_filter', $array);
$array = array_filter($array);

演示:http://codepad.org/xfXEeApj


答案 2

有很多关于如何做到这一点的例子。您可以尝试一下文档(请参阅第一条评论)。

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;
}

当然,这个例子实际上并没有使用,但你明白了。array_filter