PHP合并数组后过滤空值需先array_merge再array_filter,注意默认过滤会误删0/false;严格过滤应自定义回调判断null、空字符串和空白符;大数组推荐边合并边过滤以节省内存;多维数组需递归处理。

PHP合并两个数组后过滤空值,关键是先合并再用 array_filter() 去除“假值”(如 null、''、0、false 等),但要注意默认行为可能误删合法的 0 或 false。需根据实际需求选择严格或宽松过滤。
用 array_merge + array_filter(默认过滤所有假值)
适用于明确不需要任何“假值”的场景,比如只保留非空字符串、非零数字、非空数组等:
$arr1 = ['a', '', 'c'];$arr2 = [null, 'd', 0, 'e'];$merged = array_merge($arr1, $arr2); // ['a', '', 'c', null, 'd', 0, 'e']$filtered = array_filter($merged); // ['a' => 'a', 'c' => 'c', 4 => 'd', 6 => 'e']
注意:array_filter() 默认保留“真值”,会删掉 ''、null、0、false;同时会重置键名(返回关联数组),如需连续数字索引,可追加 array_values()。
严格过滤:只去掉 null、空字符串、空白字符串
若要保留 0、false、0.0 等合法值,需自定义回调函数:
$filtered = array_filter($merged, function($v) {return !is_null($v) && !is_string($v) ? true : trim($v) !== '';});
更稳妥写法(兼容更多类型):
$filtered = array_filter($merged, function($v) {return $v !== null && $v !== '' && !is_string($v) || (is_string($v) && trim($v) !== '');});
合并时直接跳过空值(更高效)
如果原始数组元素本身是简单值(如字符串、数字),可边合并边过滤,避免中间数组膨胀:
$result = [];foreach (array_merge($arr1, $arr2) as $v) {if ($v !== null && $v !== '' && !is_string($v) || (is_string($v) && trim($v) !== '')) {$result[] = $v;}}
这种方式内存友好,尤其适合大数组。
补充:处理多维数组中的空值
若数组含子数组(如 [['name'=>''], ['name'=>'Tom']]),需递归清理:
- 用
array_walk_recursive()提取叶子节点再过滤,或 - 写递归函数逐层判断并 unset 空子数组/空字段。
例如只保留 name 非空的子项:
$filtered = array_filter($merged, function($item) {return is_array($item) && !empty($item['name'] ?? '');});
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











