PHP合并数组保持顺序需据需求选函数:array_merge()重置数字键、字符串键后覆盖;+运算符左优先不覆盖同键;手动追加(如foreach或array_push)最可控;多维数组宜用array_merge_recursive避免覆盖。

PHP合并数组时保持原有元素顺序,关键在于选择正确的合并函数,并理解各函数对键名和索引的处理逻辑。默认情况下,array_merge() 会重置数字索引、保留字符串键,而 + 运算符则按左操作数优先、不覆盖已有键——二者行为不同,适用场景也不同。
用 array_merge():数字键重排,字符串键后覆盖
该函数会把所有数组的值依次追加,但自动将数字键重置为连续整数(0,1,2…),原顺序在值层面得以保留;字符串键若重复,则后面的值覆盖前面的。
- 适用场景:你只关心值的先后顺序,不依赖原始数字下标
-
示例:
$a = [10, 20]; $b = [30, 40]; array_merge($a, $b); // → [10,20,30,40] -
注意:如果数组含字符串键(如
['x'=>1, 'y'=>2]),相同键会被后者覆盖
用 + 数组合并运算符:左优先,不重排也不覆盖已有键
它按“左操作数 + 右操作数”顺序合并,保留左数组全部元素及其键(包括数字键),仅把右数组中**左数组不存在的键**追加进来,完全不打乱原始结构。
- 适用场景:需严格维持第一个数组的键和顺序,只补充缺失项
-
示例:
$a = [0=>10, 1=>20]; $b = [1=>99, 2=>30]; $a + $b; // → [0=>10, 1=>20, 2=>30]($b[1]被忽略) - 注意:数字键不会被重置,但右数组中与左数组同键的值不会生效
手动追加(array_push(...) 或 [] 扩展):精准控制顺序
若需把一个数组的所有值按顺序追加到另一个数组末尾,且不改变任何键的语义(尤其当目标是索引数组时),可遍历添加。
-
推荐写法:
foreach ($b as $v) { $a[] = $v; }—— 简单可靠,保持数值索引递增 -
等效写法:
array_push($a, ...$b);(PHP 5.6+,注意解包语法) - 优势:不干扰原数组键类型,不覆盖,不重排,顺序100%可控
多维或关联数组需谨慎:避免意外覆盖
若数组含嵌套结构或混合键名,array_merge_recursive() 是更安全的选择——它对相同键进行递归合并而非覆盖,能更好保留层级和顺序逻辑。
-
示例:
array_merge_recursive(['a'=>[1]], ['a'=>[2]]); // → ['a'=>[1,2]] - 注意:它仍会对数字键重排,所以纯数字索引的子数组内部顺序不变,但键会变
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











