PHP中的array_replace和array_merge之间的差异

时间:2015-12-19 05:14:44

标签: php arrays

我想弄清楚array_replace()array_merge()之间的差异。在这篇文章之后,我真的想到了这个问题:PHP array_merge empty values always less prioritar,其中问题实际上可以通过这两个函数中的任何一个来解决。所以,我试图找出在哪些情况下我们应该使用array_replace而不是array_merge,反之亦然。

在阅读了两个函数的php文档后,我发现了这两个不同之处:

  1. 如果数组包含数字键,则后面的值不会覆盖array_merge()中的原始值,这将在array_replace()中完成。
  2. array_merge()中,带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号,array_replace()不应该这样。
  3. 由于差异只与数字键有关,我们可以安全地说,当我们处理关联数组时,函数array_replace()array_merge()完全相同吗?或者我还缺少其他任何差异吗?

2 个答案:

答案 0 :(得分:8)

对于带有字符串键的数组,如上所述,这些是等效的。如果您有数字键,<label for="day" class="col-xs-2 control-label"></label> 会根据需要添加它们,甚至在必要时重新排序,而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()

答案 1 :(得分:6)

Jarek在他的文章中给出了一个很好的解释:

https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/

他还在使用+运算符和数组进行比较。

Graphic showing the difference