The*_*per 106 php arrays merge addition
一个相当简单的问题.有什么区别:
$merged = array_merge($array1, $array2);
Run Code Online (Sandbox Code Playgroud)
和
$merged = $array1 + $array2;
Run Code Online (Sandbox Code Playgroud)
?
Yeh*_*sef 83
这是一个简单的说明性测试:
$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));
Run Code Online (Sandbox Code Playgroud)
结果:
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
)
Run Code Online (Sandbox Code Playgroud)
请注意,重复的非数字键将使用union运算符获取第一个值,而后者使用array_merge.
对于数字键,第一个值将与union运算符一起使用,而所有值将与array_merge一起使用,只需重新编制索引.
我通常使用union运算符表示关联数组,使用array_merge表示数字.当然,你也可以使用array_merge进行关联,只是后面的值会覆盖之前的值.
Mik*_*wis 65
不同之处是:
的+运算符采用两个阵列的结合,而array_merge函数采用联合BUT的重复键被覆盖).
Tsc*_*cka 20
+符号仅获取数组键第一次出现时的值.
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);
Run Code Online (Sandbox Code Playgroud)
这输出:
加号合并
数组(4){
["a"] =>
string(3)"one"
["b"] =>
string(3)"two"
["c"] =>
string(5)"three"
[3] =>
字符串(12)"三号"
}array_merge function merge
array(4){
["a"] =>
string(6)"fourth"
["b"] =>
string(5)"fifth"
["c"] =>
string(5)"six"
[0] =>
字符串(12)"三号"
}
值得注意的是,即使它是一个字符串,它array_merge实际上也会删除三号的'3'索引,因为它是一个数字.
因此在与array_merge具有数字索引的数组合并时要小心.他们可能会丢失钥匙.如果它们对你很重要,则在它们之前加上一个字符串.
所以不要'3' => 'three'使用类似的东西'_3' => 'three'
luc*_*nov 15
资料来源:https : //softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
停止使用array_merge($ defaults,$ options):
function foo(array $options)
{
$options += ['foo' => 'bar'];
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:array_replace函数从PHP5.3开始存在。