array_merge和array+的区别分析

array_merge和array+的区别分析

记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别

首先来看看键名是string,两者的区别

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
47
48
49
50
51
52
<?php
$arr1 = array('a' => 'PHP');
$arr2 = array('a' => 'JAVA');
print_r(array_merge($arr1, $arr2));
// 结果:
/*
Array
(
[a] => JAVA
)
*/
# 分析:如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值

print_r($arr1 + $arr2);
// 结果:
/*
Array
(
[a] => PHP
)
*/
# 分析:如果键名为字符,且键名相同,数组相加会将最先出现的值作为结果

// 再比如:
$arr1 = array(
'a' => 1,
'b' => 2
);
$arr2 = array(
'a' => 1,
'b' => 3,
'c' => 2
);
$ret = array_merge($arr1, $arr2);
print_r($ret);
# 结果:
/*Array
(
[a] => 1
[b] => 3
[c] => 2
)*/

$ret = $arr1 + $arr2;
print_r($ret);
# 结果:
/*Array
(
[a] => 1
[b] => 2
[c] => 2
)*/

如果键名是数字,两者区别:

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
$arr1 = array('JAVA', 'PHP');
$arr2 = array('PYTHON', 'PHP');
print_r(array_merge($arr1, $arr2));
# 结果:
/*Array
(
[0] => JAVA
[1] => PHP
[2] => PYTHON
[3] => PHP
)*/
# 分析:如果键名为数字,array_merge()不会进行覆盖

print_r($arr1 + $arr2);
# 结果:
/*Array
(
[0] => JAVA
[1] => PHP
)*/
# 分析:如果键名为数字,数组相加会将最先出现的值作为结果,后面键名相同的会被抛弃

// 再比如:
$arr1 = array(
1 => '1',
2 => '2'
);
$arr2 = array(
1 => '1',
2 => '3',
3 => '2'
);
var_dump($arr1);
var_dump($arr2);
# 结果:
/*array(2) {
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
array(3) {
[1]=>
string(1) "1"
[2]=>
string(1) "3"
[3]=>
string(1) "2"
}*/
$ret = array_merge($arr1, $arr2);
print_r($ret);
# 结果:
/*Array
(
[0] => 1
[1] => 2
[2] => 1
[3] => 3
[4] => 2
)*/
# 分析:如果数组中的键名为数字时,会重新格式化键名并且保留所有对应的键值。

$ret = $arr1 + $arr2;
print_r($ret);
# 结果:
/*Array
(
[1] => 1
[2] => 2
[3] => 2
)*/
# 分析:如果键名为数字,数组相加会将最先出现的值作为结果,后面键名相同的会被抛弃

// 再比如
$arr1 = array(1, 2);
$arr2 = array(1, 2, 8);

$ret = array_merge($arr1, $arr2);
var_dump($ret);
# 结果:
/*array(5) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(1)
[3]=> int(2)
[4]=> int(8)
}*/

$ret = $arr1 + $arr2;
print_r($ret);
# 结果:
/*Array
(
[0] => 1
[1] => 2
[2] => 8
)*/

以上的区别要特别注意。关于“array_merge和数组相加的区别”上面已经阐述的很清楚了,回到我最初的问题“如何最有效的获取字符键名相同值不同的两个数组值集合呢”,不会这要对每个数组遍历吧,其实PHP中还有一个函数:array_merge_recursive—递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去。如下例:

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
<?php
$arr1 = array(
'a' => 'PHP',
'C'
);
$arr2 = array(
'a' => 'JAVA',
'C',
'PYTHON'
);
var_dump($arr1, $arr2);
# 结果:
/*array(2) {
["a"]=> string(3) "PHP"
[0]=> string(1) "C"
}
array(3) {
["a"]=> string(4) "JAVA"
[0]=> string(1) "C"
[1]=> string(6) "PYTHON"
}*/

print_r(array_merge_recursive($arr1, $arr2));
# 结果:
/*Array
(
[a] => Array
(
[0] => PHP
[1] => JAVA
)

[0] => C
[1] => C
[2] => PYTHON
)*/

无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良专业和真诚赢取更多的信任。

文章目录
  1. 1. array_merge和array+的区别分析
本站总访问量 | 本页面被访问 | 您是第位小伙伴

© XueSi博客 版权所有 备案号 : 赣ICP备19008485号-1