PHP中的array_replace()与联合运算符的区别

16
在PHP中,假设$a$b$c都是数组,那么$a = array_replace($b, $c)是否与$a = $c + $b在功能上完全相同?
我似乎找不到任何边缘情况表明否定这一点。
(只考虑一个维度,本问题不涉及递归,即: array_replace_recursive()
编辑:我在评论中发现了一条注释,指出联合运算符将保留引用,但我没有注意到array_replace()未能实现这一点。
2个回答

10

编辑:啊,抱歉,我没有注意到参数是反过来的。那么答案是肯定的,因为结果数组总是合并了这两个数组,但是+操作符会优先考虑第一个数组中的值,而array_replace函数则优先考虑第二个数组。

唯一的实际区别在于性能方面,+操作符可能更可取,因为当它找到重复元素时,它不会替换该值;它只会继续执行。此外,它不需要进行(相对昂贵的)函数调用。


不行。array_replace函数会替换元素,而+操作符则考虑第一个值:

<?php
print_r(array_replace([0 => 1], [0 => 2]));
print_r([0 => 1] + [0 => 2]);
数组
(
    [0] => 2
)
数组
(
    [0] => 1
)

引用手册指出:

+ 运算符会将右侧数组附加到左侧数组的末尾;对于两个数组中都存在的键,将使用左侧数组中的元素,右侧数组中的匹配元素将被忽略。

至于引用,在这两种情况下都得以保留。


2
看!PHP 5.4中的新简写数组语法! - BoltClock
太棒了,谢谢@Artefacto——我想它们是这样的,尽管我担心一些未记录的边缘情况(正如我注意到PHP有点臭名昭著)。 - Dan Lugg
1
我找到了一张很好的图片和描述,解释了完整的区别:https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/ - Ahmad Azimi

6
值得一提的是,如果提供的数组具有非数字键,则array_merge也与array_replace相同。

这更像是对问题的评论,而不是答案 :) - Kamafeather

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接