PHP中的array_replace和array_merge之间的差异

Tᴀʀ*_*ᴏᴏᴅ 11 php arrays

我试图找出array_replace()array_merge()之间的差异.在这篇文章之后,我真的想到了这个问题:PHP array_merge空值总是少于优先级,其中问题实际上可以通过这两个函数中的任何一个来解决.所以,我试图找出在哪些情况下我们应该使用array_replace而不是array_merge,反之亦然.

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

  1. 如果数组包含数字键,则后面的值不会覆盖原始值array_merge(),这将在中完成array_replace().
  2. array_merge(),带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号,这不应该发生array_replace().

由于差异只与数字键有关,我们可以安全地说,函数array_replace()array_merge()我们处理关联数组时完全相同吗?或者我还有其他不同之处吗?

zpr*_*zpr 11

对于带有字符串键的数组,是的,这些是等效的,正如您所提到的.如果您有数字键,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
)*/
Run Code Online (Sandbox Code Playgroud)

如您所见,array_merge已重新索引数组的数字键,并且它们都只是更新字符串键.

但是,当你有数字键时,array_merge()根本不关心键,并按照它看到的顺序添加所有内容,删除任何内容,而array_replace()顾名思义,将替换具有相似(数字)索引的键:

<?php
$a = array('0'=>'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
)*/
Run Code Online (Sandbox Code Playgroud)


小智 9

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

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

他还在使用带有数组的+运算符进行比较.

图示显示差异

  • 尽量不要只使用链接作为答案。从链接来源复制有价值的信息以保留它们以防链接停止工作是一种很好的做法 (2认同)