array_filter($arr) 默认剔除所有falsy值(null、''、0、0.0、false、[]),需按业务明确定义“空”;保留0/false/"0"须用严格比较回调;清空白字符需trim()并类型判断;遍历unset需倒序或先收集键名。

直接用 array_filter($arr) 就能移除大部分空值,但默认行为会连 0、false、"0" 一起删掉——这在很多业务里是错的。关键不是“怎么删”,而是“你定义的‘空’到底指什么”。
默认过滤:快但不精准
不传回调函数时,array_filter() 会剔除所有 PHP 中的 falsy 值:null、''、0、0.0、false、[]。适合简单清洗,比如表单提交后粗筛。
- 保留原始键名,不会重排索引
- 需要连续数字键?再套一层
array_values() - 示例:
array_filter(['a', '', null, 0, false])→[0 => 'a']
只清空字符串和 null,其他全留
当 0 是有效状态码、false 表示关闭、"0" 来自表单输入时,必须写回调函数,用严格比较(!==)避免类型转换陷阱。
return $v !== '' && $v !== null;- 如果还要留空数组,就别加
&& $v !== [] - 注意:
"0" == 0为 true,但"0" === 0是 false,所以"0"不会被误删
清“空白字符串”:含空格、换行、制表符
用户粘贴或编辑器生成的内容常带看不见的空白,trim($v) === '' 才算真正空。
立即学习“PHP免费学习笔记(深入)”;
array_filter($arr, function($v) { return trim($v) !== ''; })-
' '、"\t"、"\n"、"\r\n"全部被剔除 - 注意:对非字符串类型(如数字、null)调用
trim()会触发 warning,建议先判断类型或用@trim()抑制(慎用)
手动遍历 + unset:可控但要小心
适合需边删边做日志、校验或处理多维结构的场景,但不能在 foreach 中直接 unset 原数组并期望安全遍历——PHP 内部指针可能跳过元素。
- 正确写法:先用
foreach ($arr as $k => $v),再unset($arr[$k]) - 或改用
for倒序遍历,避免键位偏移影响 - 关联数组常用,数字索引建议优先用
array_filter配合array_values



















