我试图找出array_replace()和array_merge()之间的差异.在这篇文章之后,我真的想到了这个问题:PHP array_merge空值总是少于优先级,其中问题实际上可以通过这两个函数中的任何一个来解决.所以,我试图找出在哪些情况下我们应该使用array_replace而不是array_merge,反之亦然.
在阅读了两个函数的php文档后,我发现了这两个不同之处:
如果数组包含数字键,则后面的值不会覆盖原始值array_merge()
,这将在中完成array_replace()
.
在array_merge()
,带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号,这不应该发生array_replace()
.
由于差异只与数字键有关,我们可以安全地说,函数array_replace()
和array_merge()
我们处理关联数组时完全相同吗?或者我还有其他不同之处吗?
对于带有字符串键的数组,是的,这些是等效的,正如您所提到的.如果您有数字键,array_merge()
将根据需要附加它们,甚至在必要时重新排序它们,而array_replace()
将覆盖原始值.
例如,
$a = array('a' => 'hello', 'b' => 'world'); $b = array('a' => 'person', 'b' => 'thing', 'c'=>'other', '15'=>'x'); print_r(array_merge($a, $b)); /*Array ( [a] => person [b] => thing [c] => other [0] => x )*/ print_r(array_replace($a, $b)); /*Array ( [a] => person [b] => thing [c] => other [15] => x )*/
如您所见,array_merge
已重新索引数组的数字键,并且它们都只是更新字符串键.
但是,当你有数字键时,array_merge()
根本不关心键,并按照它看到的顺序添加所有内容,删除任何内容,而array_replace()
顾名思义,将替换具有相似(数字)索引的键:
'a', '1'=>'c'); $b = array('0'=>'b'); print_r(array_merge($a, $b)); /*Array ( [0] => a [1] => c [2] => b )*/ print_r(array_replace($a, $b)); /*Array ( [0] => b [1] => c )*/
Jarek在他的文章中给出了一个很好的解释:
https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
他还在使用带有数组的+运算符进行比较.