概述
php合并数组一般有三个方法
- 使用
array_merge函数 - 使用
array_merge_recursive函数 - 使用操作符
+ 
对比差异
array_merge与+的比较
- 对于字符串索引,array_merge以后面的数组为准,覆盖前面数组相应的值;
+操作以前面的数组为准 - 对于数字索引,array_merge会同时保留所有数组的对应的值,并且把索引从0重排;
+操作处理数字索引的策略和处理字符串索引一致:以前面的数组为准,且保留原索引 
array_merge与array_merge_recursive的比较
- 对于相同的字符串索引,array_merge_recursive会把所有的值合并成一个数组,而array_merge会以后面的数组为准
 - 对于数字索引,两者都会保留全部的值,并把索引从0重排
 
注意
- array_merge只传入一个数组参数时,会把参数中的数组索引从0重排
 - array_merge_recursive对于相同的字符串索引,如果值仍是数组,则会对数组再次合并当做此索引的值
 
代码示例
1  | $arr1 = [  | 
以上代码输出为:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47Array
(
    [0] => super
    [1] => star
    [hello] => your world
    [arr] => Array
        (
            [0] => yes no
        )
    [2] => lets
    [3] => laugh
)
Array
(
    [2] => super
    [1] => star
    [hello] => my world
    [arr] => Array
        (
            [3] => ha
            [2] => ya
            [hello] => wa
        )
)
Array
(
    [0] => super
    [1] => star
    [hello] => Array
        (
            [0] => my world
            [1] => your world
        )
    [arr] => Array
        (
            [3] => ha
            [2] => ya
            [hello] => wa
            [3] => yes no
        )
    [2] => lets
    [3] => laugh
)
Bug
在7.0.20版本中,array_merge_recursive合并相同字符串索引的数组时,合并结果中会有相同的数字索引。
1  | $arr1 = [  | 
以上代码会输出:1
2
3
4
5
6
7
8
9
10
11Array
(
    [arr] => Array
        (
            [3] => hello
            [2] => world
            [2] => yes
            [3] => no
        )
)