PHP关联数组合并问题:使用array_push无法实现预期的键值合并效果
PHP关联数组合并:解决子数组键值对合并问题
我来帮你搞定这个数组合并的问题~你遇到的问题根源是用错了合并方法,咱们一步步理清楚:
为什么array_push()不符合预期?
array_push()的作用是往数组末尾添加新元素,它不会解析你传入的$sub_array内部的键,而是直接把整个$sub_array当成一个单独的元素塞进$master_array里。用了它之后,你的数组会变成这样:
[ 56 => ['item_name'=> 'xyz', 'item_code'=> 56], 0 => [60 => ['item_name'=> 'xy', 'item_code'=> 60]] ]
这就是你看到的非预期结构啦。
正确的合并方法
你的需求是把两个数组的键值对直接合并(保留各自的原键),以下两种方法都能完美实现:
方法1:使用数组相加运算符+
这个运算符会把第二个数组中不存在于第一个数组的键值对添加进去,同时保留两个数组的原有键(如果有重复键,会保留第一个数组的值)。代码示例:
$master_array = [ 56 => [ 'item_name'=> 'xyz', 'item_code'=> 56, ] ]; $sub_array = [ 60 => [ 'item_name'=> 'xy', 'item_code'=> 60, ] ]; // 合并操作 $master_array += $sub_array; // 输出结果就是你想要的结构 print_r($master_array);
方法2:使用array_replace()函数
这个函数会用后面数组的元素替换前面数组的相同键元素,不同键的元素则直接添加进去。适合需要覆盖重复键值的场景,当然在你的案例中键不重复,效果和+一样:
$merged_array = array_replace($master_array, $sub_array); print_r($merged_array);
两种方法执行后,都会得到你期望的结果:
[ 56 => [ 'item_name'=> 'xyz', 'item_code'=> 56, ], 60 => [ 'item_name'=> 'xy', 'item_code'=> 60, ] ]
内容的提问来源于stack exchange,提问作者kashfiq
相关产品推荐
相关产品推荐

