答案: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' 这类值(它们在逻辑上可能是有效数据),就需要自定义判断条件:
立即学习“PHP免费学习笔记(深入)”;
$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 等。
基本上就这些。根据业务需求调整过滤规则,避免误删有效数据。尤其注意区分 “真正无意义的空” 和 “合法的零值”。











