php如何合并两个数组?php合并多个数组的操作指南

php如何合并两个数组?php合并多个数组的操作指南
最新回答
囚我在心上

2021-01-30 04:35:48

PHP中合并数组时,array_merge()和+运算符的关键区别在于键名冲突的处理方式及数字键的索引规则,具体如下:

  • 键名冲突处理

    array_merge()

    字符串键:后合并数组的值会覆盖前数组的同名键值。$array1 = ['a' => 1];$array2 = ['a' => 2];$result = array_merge($array1, $array2); // ['a' => 2]

    数字键:所有数字键会被重新索引,从0开始递增。$array1 = [0 => 'a', 1 => 'b'];$array2 = [0 => 'c', 1 => 'd'];$result = array_merge($array1, $array2); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd']

    +运算符

    保留左侧数组的键值对:若右侧数组存在与左侧同名的键(无论数字或字符串),右侧值会被忽略。$array1 = ['a' => 1, 0 => 'x'];$array2 = ['a' => 2, 0 => 'y'];$result = $array1 + $array2; // ['a' => 1, 0 => 'x']

  • 数字键索引规则

    array_merge():合并后数字键重新索引,可能导致键名丢失原始含义。$array1 = [10 => 'a', 20 => 'b'];$array2 = [30 => 'c'];$result = array_merge($array1, $array2); // [0 => 'a', 1 => 'b', 2 => 'c']

    +运算符:保留左侧数组的数字键,右侧新增的数字键若未冲突则保留原值。$array1 = [0 => 'a', 1 => 'b'];$array2 = [2 => 'c', 0 => 'd'];$result = $array1 + $array2; // [0 => 'a', 1 => 'b', 2 => 'c']

  • 合并多个数组的差异

    array_merge():支持直接传入多个数组参数,依次合并。$array1 = ['a' => 1];$array2 = ['b' => 2];$array3 = ['c' => 3];$result = array_merge($array1, $array2, $array3); // ['a' => 1, 'b' => 2, 'c' => 3]

    +运算符:需通过链式操作实现,且仅保留第一个数组的键。$array1 = ['a' => 1];$array2 = ['a' => 2, 'b' => 3];$array3 = ['c' => 4];$result = $array1 + $array2 + $array3; // ['a' => 1, 'b' => 3, 'c' => 4]

  • 适用场景建议

    array_merge()

    需要重新索引数字键(如合并列表型数据)。

    希望后数组覆盖前数组的同名键(如更新配置项)。

    +运算符

    需保留左侧数组的键结构,仅补充右侧独有的键(如合并默认值与用户输入)。

    处理关联数组且避免键覆盖时(如合并多个配置数组)。

总结:array_merge()更侧重于“覆盖式合并”,适合需要重新组织键名的场景;+运算符则强调“补充式合并”,适合保留原始键结构的场景。根据数据特性和需求选择合适方法可避免意外结果。