当前位置:  开发笔记 > 编程语言 > 正文

PHP中的array_replace和array_merge之间的差异

如何解决《PHP中的array_replace和array_merge之间的差异》经验,为你挑选了2个好方法。

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

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

    如果数组包含数字键,则后面的值不会覆盖原始值array_merge(),这将在中完成array_replace().

    array_merge(),带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号,这不应该发生array_replace().

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



1> zpr..:

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



2> 小智..:

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

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

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

图示显示差异

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有