PHP中数组合并的两种方法及区别介绍


在PHP中,数组合并主要有两种方法,它们分别是`array_merge()`函数和`+`操作符(或称为“联合”操作符)。下面我将简要介绍这两种方法及其区别。

### 1. `array_merge()`函数

`array_merge()`函数用于合并一个或多个数组。如果输入的数组中有相同的字符串键名,则后面的数组中的值将覆盖前面的值;如果数组包含数字键名,后面的数组将不会覆盖原来的值,而是附加到后面。

**示例代码**:


$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);

**输出**:

Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )

注意,`"color"`键的值被`$array2`中的`"green"`覆盖,而数字键名则保持其原有的顺序和值。

### 2. `+`操作符(联合操作符)

使用`+`操作符进行数组联合时,如果两个数组中有相同的字符串键名,则左边的数组中的值会被保留,而右边的数组中的相应值会被忽略。数字键名则会被重新索引,但这通常用于字符串键名的情况。

**示例代码**:


$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid");
$result = $array1 + $array2;
print_r($result);

**输出**:

Array ( [color] => red [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid )

注意,`"color"`键的值保持为`$array1`中的`"red"`,而`$array2`中的`"color" => "green"`被忽略了。数字键名则按照出现的顺序被重新索引。

### 区别总结

- **覆盖行为**:`array_merge()`会覆盖具有相同字符串键名的值(后面的数组覆盖前面的),而`+`操作符则保留左边数组的值。

- **数字键名处理**:`array_merge()`会将数字键名视为要保留的序列,而`+`操作符在联合时会重新索引数字键名(尽管这在处理字符串键名时不太重要)。

- **使用场景**:当你需要合并数组且关心键名的唯一性时,`+`操作符可能更合适;当你需要完全合并数组,包括覆盖相同的键名时,`array_merge()`是更好的选择。