php数组空值过滤应优先用array_filter()而非正则,因其默认剔除falsy值且类型安全;正则仅适用于全字符串数组中匹配视觉空值,且需先校验类型。

PHP数组空值过滤不用正则更合理
PHP数组空值过滤本身不需要正则——array_filter() 默认行为就能剔除 null、false、0、""(空字符串)、0.0 和空数组等“falsy”值。正则只适合处理字符串内容匹配,对数组元素类型判断既低效又易出错。
用 array_filter() 过滤常见空值的 3 种写法
根据你要保留的值类型,选择对应策略:
- 只删
null和空字符串,但保留0、false:$filtered = array_filter($arr, function($v) { return $v !== null && $v !== ''; }); - 保留非空字符串(含
"0"、"false"):$filtered = array_filter($arr, 'is_string'); // 先筛类型,再 trim 判断<br>$filtered = array_filter($filtered, function($v) { return trim($v) !== ''; }); - 严格只删
null、''、[],不碰0或false:$filtered = array_filter($arr, function($v) {<br> return !is_null($v) && $v !== '' && !empty($v) || is_array($v) && count($v) > 0;<br>});(注意:这里empty([])是true,所以需单独判断数组长度)
为什么别用 preg_match() 做空值过滤
正则函数如 preg_match() 只能作用于字符串,对 null、int、array 等会触发警告或强制转成字符串(比如 null → "",[1,2] → "Array"),导致误判。
- 对
null调用preg_match('/./', null)会报Warning: preg_match(): Parameter is not a string - 对数组调用会转成字符串
"Array",preg_match('/^$/', $arr)永远不匹配,失去过滤意义 - 性能差:每次都要做类型转换 + 正则编译 + 执行,比直接比较慢 3–5 倍
真要匹配“字符串类空值”才用正则
仅当你的数组元素全是字符串,且你想过滤掉“视觉上为空”的情况(如全空白符、中文全角空格、零宽字符等),才考虑正则辅助:
立即学习“PHP免费学习笔记(深入)”;
$filtered = array_filter($arr, function($v) {<br> return is_string($v) && !preg_match('/^\s*$/u', $v);<br>});
其中 /^\s*$/u 的 u 修饰符支持 UTF-8,能匹配中文空格、(零宽空格)等;但注意它仍不处理 null 或数字,必须先确保类型安全。
真正容易被忽略的是:数组键名在 array_filter() 后默认保留,若需重排索引,得额外加 array_values();还有嵌套数组需递归处理,不能靠一行正则解决。











