一个相当简单的问题。有什么区别:array_merge和array + array有什么区别?
$merged = array_merge($array1, $array2);
和
$merged = $array1 + $array2;
?
一个相当简单的问题。有什么区别:array_merge和array + array有什么区别?
$merged = array_merge($array1, $array2);
和
$merged = $array1 + $array2;
?
的区别是:
的+
运算符采用两个阵列的结合,而array_merge
函数采用联合BUT的重复键被覆盖)。
那么,这两者之间有什么区别:[array_merge](http://codepad.org/6QdQh908),[加号](http://codepad.org/mu0aF3tN)(尽管我必须切换数组) ? – 2011-12-06 20:13:58
对于初学者来说,这里有一个警告词,两种情况下的操作结果都是** null **,如果任何一个数组是** null **。有些人可能并不关心这个假设,因为它是一个联合操作,如果其中一个是** null **,结果将是正确的(非空)数组。但是,如果其中一个数组是空数组,则这种情况也适用。所以,作为一个好习惯,我认为,我们应该将输入数组初始化为空数组。你们说什么? – 2012-07-13 06:58:16
如果有重复的密钥,“参加工会”将永远不会放弃其中的一个。不同之处在于哪一个。 – alexis 2016-03-11 09:19:48
array_merge()
导致在输入数组中找到的所有数字键所得到的阵列中重建索引。工会运营商+
不会导致重新索引。
我相信array_merge
改写复制non_numeric键,在$array1 + $array2
没有。
这里有一个简单的说明测试:
$ar1 = [
0 => '1-0',
'a' => '1-a',
'b' => '1-b'
];
$ar2 = [
0 => '2-0',
1 => '2-1',
'b' => '2-b',
'c' => '2-c'
];
print_r($ar1+$ar2);
print_r(array_merge($ar1,$ar2));
与结果:
Array
(
[0] => 1-0
[a] => 1-a
[b] => 1-b
[1] => 2-1
[c] => 2-c
)
Array
(
[0] => 1-0
[a] => 1-a
[b] => 2-b
[1] => 2-0
[2] => 2-1
[c] => 2-c
)
注意,重复非数字键使用UNION运算符,但使用后一个会第一时间值array_merge。
对于数字键,第一个值将与工会操作者使用,而所有的值将与array_merge使用,只是重建索引。
我一般使用关联数组联合运营商和array_merge的数字。当然,你可以使用array_merge来进行关联,只是后面的值会覆盖前面的值。
+符号仅从开始发生数组键。
array_merge需要从最后发生阵列密钥的值。
实施例:
$first = ['a'=>'one',
'b'=>'two',
'c'=>'three'];
$second = ['a'=>'fourth',
'b'=>'fifth',
'c'=>'sixth',
'3'=>'number three'];
$merged = $first + $second;
echo "<pre> plus sign merge\n";
var_dump($merged);
$merged = array_merge($first,$second);
echo "\n array_merge function merge\n";
var_dump($merged);
此输出:
加符号合并
阵列(4){
[ “一”] =>
串(3)“一个“
[”b“] =>
string(3)”two“
[ “c” 的] =>
串(5)的 “三”
[3] =>
串(12) “数字3”
}array_merge功能合并
阵列(4){
[ “一”] =>
串(6) “第四”
[ “b” 的] =>
串(5) “十五”
[ “c” 的] =>
串(5) “第六”
[0] =>
串(12) “数字3”
}
有趣在此要注意的是,array_merge
actally 擦除的' 3'索引,即使它是一个字符串,因为它是一个数字。
所以请小心合并array_merge
与数字索引数组。他们可能会丢失钥匙。如果它们对你来说很重要,那么在它们前面加一个字符串。
所以不是'3' => 'three'
使用类似'_3' => 'three'
“*即使它是一个字符串,因为它是一个数字*”值得+1 :-) – 2016-07-09 11:06:05
请另一个区别注意:工会(+)将不会覆盖与空值非空值(考虑相同的密钥),而array_merge将:
$a = array('foo' => 'bar');
$b = array('foo' => ''); // or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
输出:
另一个例子(数组没有明确的键,它对于很明显如何操作+
和array_merge
工作,但是当看到“明显”的事情更简单;))
$a = array('apple');
$b = array('orange', 'lemon');
echo '$a + $b = '; print_r($a + $b);
echo 'array_merge($a, $b) = '; print_r(array_merge($a, $b));
会给:
$a + $b = Array
(
[0] => apple
[1] => lemon
)
array_merge($a, $b) = Array
(
[0] => apple
[1] => orange
[2] => lemon
)
无法对答案发表评论,所以我会再写一。
@ZalemCitizen根本就是错误的,工会(+)将覆盖非空值与空的:
$a = array('foo' => 'bar');
$b = array('foo' => null);
var_dump($b+$a);
var_dump(array_merge($a, $b));
输出:
array(1) {
["foo"]=>
NULL
}
array(1) {
["foo"]=>
NULL
}
记住数组的顺序。
可能重复的[+运营商的数组在PHP?](http://stackoverflow.com/questions/2140090/operator-for-array-in-php) – Gordon 2011-03-22 16:06:15
可能戈登,错过了,由于标题不是在其中有array_merge。 – 2011-03-22 16:08:58
是的,可以。 NP。 – Gordon 2011-03-22 16:19:14