PHP中存在null数组时如何正确合并多个数组?
解决array_merge_recursive遇null数组失效的问题
嗨,这个问题的核心原因是当$array1/$array2/$array3其中任意一个为null时,你直接访问$arrayX['results']会触发PHP警告,而且array_merge_recursive函数不接受null作为参数,最终导致整个合并结果变成null,自然json_encode后输出null。
解决方案思路
我们需要先对每个数组做安全处理:
- 确保
json_decode返回null时,把数组初始化为空数组; - 安全提取
results部分,即使原数组没有这个键,也返回空数组; - 最后用合适的合并函数完成拼接(你的场景用
array_merge更合适,因为只是拼接一维元素)。
完整代码示例
// 处理每个json_decode结果,null时替换为空数组 $array1 = json_decode($array1, TRUE) ?? []; $array2 = json_decode($array2, TRUE) ?? []; $array3 = json_decode($array3, TRUE) ?? []; // 安全提取results字段,不存在则返回空数组 $results1 = $array1['results'] ?? []; $results2 = $array2['results'] ?? []; $results3 = $array3['results'] ?? []; // 合并所有results元素(array_merge足够满足你的拼接需求) $array4 = array_merge($results1, $results2, $results3); // 输出最终结果 echo json_encode($array4);
代码解释
?? []是PHP7+的空合并运算符,当json_decode返回null(比如原JSON无效、为空)时,自动将变量设置为空数组,避免后续访问键值时出错;$array['results'] ?? []确保即使数组中没有results键,也能得到一个空数组,不会抛出"Undefined index"警告;- 为什么用
array_merge而不是array_merge_recursive?因为你的需求是把多个results数组里的独立元素拼接在一起,array_merge会直接合并索引数组的元素,而array_merge_recursive主要用于处理有相同键名的关联数组递归合并,在这里是多余的。
这样处理后,即使其中一个或多个原数组为null,合并操作依然能正常执行,输出的结果只会包含有效数组的results元素。
内容的提问来源于stack exchange,提问作者CHarris
相关产品推荐
相关产品推荐

