如何合并两个带自定义键的PHP数组并按键索引排序
解决PHP数组合并时保留原键并按索引排序的问题
嘿,这个坑我之前踩过!array_merge() 对数字索引的数组确实会自动重置键名,所以才会出现你看到的顺序混乱情况——它不管你原来的键是什么,只会把所有元素按传入顺序重新从0开始编号,自然不符合你的预期。
要实现保留原键且按键升序排列的合并效果,你可以这样做:
方法步骤:
- 用
+运算符合并两个数组(它会保留原有的数字键,不会重置); - 用
ksort()对合并后的数组按键进行升序排序,确保元素按0→1→2的顺序排列。
完整代码示例:
$a = array( 1 => 'This should be position #1 in merged array' ); $b = array( 0 => 'This should be position #0 in merged array', 2 => 'This should be position #2 in merged array' ); // 合并数组,保留原键(注意:+运算符会优先保留左边数组的键,这里两边无重复键,所以直接合并所有元素) $merged = $a + $b; // 按键升序排序,保持键值关联 ksort($merged); // 输出结果 print_r($merged);
输出结果:
Array ( [0] => This should be position #0 in merged array [1] => This should be position #1 in merged array [2] => This should be position #2 in merged array )
补充说明:
- 为什么不用
array_merge()?因为它针对数字索引数组的逻辑是重新索引,会丢弃原键,把所有元素按传入顺序依次从0开始编号,这就是你之前得到混乱顺序的原因。 - 如果你的数组可能存在重复键,
+运算符会优先保留左边数组的键值,而array_replace()会用右边数组的键值覆盖左边的,你可以根据需求选择。
内容的提问来源于stack exchange,提问作者Sometip
相关产品推荐
相关产品推荐

