php中array_filter清除空值

答案:array_filter()可过滤数组假值,默认移除null、false、0、""、[]等,但保留' ';通过自定义回调可保留0或'0';处理多维数组需递归遍历,结合条件过滤确保有效数据不被误删。

在 PHP 中,array_filter() 函数常用来过滤数组中的元素。当你想清除数组中的空值(如 null、false、0、""、" "、array() 等),这个函数非常实用。

基本用法:清除空值

直接调用 array_filter() 而不传入回调函数时,PHP 会默认移除“假值”(falsy values):

$original = [1, 0, '', null, 'hello', false, ' ', [], ['name' => 'john']];
$filtered = array_filter($original);

// 结果:
// [0 => 1, 4 => 'hello', 6 => ' ', 8 => ['name' => 'john']]

注意:字符串空格 ' ' 不是空值,会被保留。空数组 [] 会被当作 false 移除。

保留特定“空”但有意义的值

如果你希望保留 0 或 '0' 这类值(它们在逻辑上可能是有效数据),就需要自定义判断条件:

$original = [1, 0, '0', '', null, 'hello', false];
$filtered = array_filter($original, function($value) {
    return $value !== null && $value !== '' && $value !== false;
});

// 保留了 0 和 '0'
// 结果:[0 => 1, 1 => 0, 2 => '0', 5 => 'hello']

处理多维数组或特殊空值

对于多维数组,array_filter() 只作用于第一层。若要递归清理,需配合遍历:

function remove_empty_recursively($array) {
    foreach ($array as &$value) {
        if (is_array($value)) {
            $value = remove_empty_recursively($value);
        }
    }
    return array_filter($array, function($value) {
        return $value !== null && $value !== '' && $value !== [];
    });
}

这个函数会递归地清除 null、空字符串和空数组,但保留 0、'0'、true 等。

基本上就这些。根据业务需求调整过滤规则,避免误删有效数据。尤其注意区分 “真正无意义的空” 和 “合法的零值”。