PHP中如何合并两个数组?合并失败求解决方案
PHP数组合并问题解决方案
嘿,我来帮你搞定这个数组合并的难题!你说用array_push没成功,大概率是用错了它的用法——array_push本质是往数组末尾加单个/多个元素,不是专门用来合并两个数组的,直接塞整个数组进去的话,会把第二个数组当成一个元素嵌套进去,肯定不是你想要的结果。
下面分几种常见场景给你讲正确的合并方法:
1. 合并普通索引数组(保留所有元素,包括重复项)
比如你有两个普通的索引数组:
$arr1 = [1, 2, 3]; $arr2 = [4, 5, 6];
最推荐的方法:用array_merge()
这是PHP专门用来合并数组的函数,直接把两个数组拼起来:
$mergedArr = array_merge($arr1, $arr2); // 输出结果:[1, 2, 3, 4, 5, 6]
非要用array_push的话?
得用**展开运算符...**把第二个数组拆成单个元素再推进去(PHP 5.6及以上版本支持):
array_push($arr1, ...$arr2); // 现在$arr1就变成了合并后的数组:[1, 2, 3, 4, 5, 6]
要是不用展开运算符,直接写array_push($arr1, $arr2),结果会是[1,2,3, [4,5,6]]——这就是你之前失败的原因!
2. 合并关联数组(键名重复时覆盖)
如果是带键名的关联数组,比如:
$userInfo1 = ['name' => 'Alice', 'age' => 25]; $userInfo2 = ['age' => 26, 'city' => 'New York'];
用array_merge()的话,重复的键名(比如age)会被后面数组的值覆盖:
$mergedUser = array_merge($userInfo1, $userInfo2); // 输出结果:['name' => 'Alice', 'age' => 26, 'city' => 'New York']
3. 合并关联数组(保留所有键值,不覆盖重复键)
关联数组的键是唯一的,没法直接保留重复键名。如果想把所有值都合并成索引数组,可以先把两个数组转成纯值数组再合并:
$arr1 = ['a' => 1, 'b' => 2]; $arr2 = ['b' => 3, 'c' => 4]; $mergedArr = array_merge(array_values($arr1), array_values($arr2)); // 输出结果:[1, 2, 3, 4]
要是想保留原键名但又不覆盖,只能手动循环把第二个数组的元素以新的方式插入(比如给键加后缀),不过这种场景比较少见。
内容的提问来源于stack exchange,提问作者pirpirim
相关产品推荐
相关产品推荐

