PHP中array_merge合并数组结果异常,求助解决方法
解决PHP array_merge合并数组不符合预期的问题
嘿,我懂你碰到的困惑了!让我先帮你理清为什么会出现这个结果,再给你解决办法。
问题原因分析
你现在用array_merge得到的结果其实是PHP这个函数的正常行为哦。咱们拆解下两个数组的结构:
- 第一个数组是关联数组,键是字符串
id和name; - 第二个数组是索引数组,里面的每个元素又是独立的关联数组。
array_merge的核心规则是:
- 对于字符串键的元素,后面数组的元素会覆盖前面数组中相同键的元素;
- 对于数字索引的元素,会把它们追加到结果数组的末尾,并且重新排序索引。
所以你的第二个数组里的每个子数组,都会被当作一个单独的元素追加到第一个数组后面,就出现了你看到的结果——第一个数组的键值对保留,第二个数组的子数组作为数字索引项存在。
解决方案
如果你想要的是把第一个数组也变成一个子数组,和第二个数组的所有子数组放在同一个层级(也就是最终结果是一个包含4个子数组的索引数组),那你只需要把第一个数组先包装成一个单元素数组,再和第二个数组合并就行:
$array1 = ['id' => 12, 'name' => 'Popular']; $array2 = [ ['id' => 8, 'name' => 'Flowers'], ['id' => 10, 'name' => 'Chocolates'], ['id' => 11, 'name' => 'Sweets and Dry Fruits'] ]; // 包装第一个数组为子数组后合并 $mergedArray = array_merge([$array1], $array2); print_r($mergedArray);
运行结果
Array ( [0] => Array ( [id] => 12 [name] => Popular ) [1] => Array ( [id] => 8 [name] => Flowers ) [2] => Array ( [id] => 10 [name] => Chocolates ) [3] => Array ( [id] => 11 [name] => Sweets and Dry Fruits ) )
如果你有其他合并需求(比如希望将第一个数组的键值对与第二个数组的子数组进行合并,但这样会出现id和name键的覆盖问题),可以根据具体需求调整实现方式。
内容的提问来源于stack exchange,提问作者Aman Deep
相关产品推荐
相关产品推荐

