Ale*_*lex 41 php arrays array-merge
如何使它成为array_merge()用两个数组覆盖具有不同值但相同键索引的两个键?
例如,合并:
[0] => 'whatever'
同
[0] => 'whatever', [1] => 'a', [2] => 'b'
应该产生
[0] => 'whatever', [1] => 'a', [2] => 'b'
基本上我希望array_merge与数组有字符串键时的行为方式相同...
AJ.*_*AJ. 75
使用+运营商.
array_merge与+运营商比较:
<?php
$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => whatever
[1] => whatever
[2] => a
[3] => b
)
Array
(
[0] => whatever
[1] => a
[2] => b
)
Run Code Online (Sandbox Code Playgroud)
该+运营商还是工作,如果你的关联数组具有数字键外的顺序:
<?php
$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => whatever
[1] => a
[2] => whatever
[3] => b
)
Array
(
[0] => whatever
[1] => a
[2] => b
)
Run Code Online (Sandbox Code Playgroud)
array_merge在这种情况下请注意创建一个新密钥.不可取......
手动编写非常简单:
function array_merge_custom($first, $second) {
$result = array();
foreach($first as $key => $value) {
$result[$key] = $value;
}
foreach($second as $key => $value) {
$result[$key] = $value;
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
更新:这与union运算符(return $first + $second;)的行为不同,因为在这种情况下,当两个元素具有相同键的元素时,第二个数组会获胜.
但是,如果切换参数的位置并将要获胜的数组放在第一个操作数的冲突情况下,则可以获得相同的行为.所以上面的函数表现得很像return $second + $first;.