PHP官方文档对array_merge的定义
array_merge( array $array1[, array $...] ) : array
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
对坑的说明
看上面的文档的粗体字部分, 如果你信了, 并且只是相信文档说的这一种情况, 那你就错了.
看文档给的例子:
$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);
var_dump($result);
结果是:
Array
(
[0] => data
)
嗯, 对, 文档给的这个例子没有问题, 确实没有任何问题.
但是, 如果两个数组都不为空, 且有数字下标, 它一样会将数字下标重新索引
$arr = [
11 => 'a',
12 => 'b'
];
$arr2 = [
'a' => 'a1',
14 => 'b1'
];
var_dump(array_merge($arr, $arr2));
结果是:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
["a"]=>
string(2) "a1"
[2]=>
string(2) "b1"
}
数字下标都被重置了!
so, 这种情况下只能使用 +
来处理:
$result = $arr + $arr2;