概述
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
)
)