PHP中如何让合并数组时第二个数组的重复键元素排在末尾?
如何让array_merge后重复键排在数组末尾?
嘿,这个问题我之前也碰到过!array_merge()对于关联数组的键顺序处理确实有点“固执”——它会保留第一个数组里键的原始位置,哪怕后面的数组覆盖了对应的值,位置还是不会变。要让重复的键挪到合并后数组的末尾,其实可以用一个简洁的技巧:
解决方案代码
$arr1 = ['p' => 2, 'pm' => 1]; $arr2 = ['p' => '']; // 第一步:从arr1中移除所有和arr2重复的键 $arr1Clean = array_diff_key($arr1, $arr2); // 第二步:先合并无重复的部分,再追加arr2的内容 $result = array_merge($arr1Clean, $arr2); print_r($result);
输出结果
Array ( [pm] => 1 [p] => )
逻辑说明
array_diff_key($arr1, $arr2)会返回arr1中所有不存在于arr2的键值对,这里就是['pm' => 1]- 再用
array_merge()把这个无重复的数组和arr2合并,这样arr2里的键(包括重复的p)就会全部排在合并后数组的末尾 - 如果
arr2有多个键(比如['p' => '', 'x' => 3]),这个方法同样适用,会把所有arr2的键都放到最后
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

