php 中的 array_replace() 与联合运算符

2022-08-31 01:10:58

在 PHP 中,(假设$a$b$c是数组)在功能上总是与 ?$a = array_replace($b, $c)$a = $c + $b

我似乎找不到任何边缘情况可以表明相反的情况。

(只是使用一个维度,这个问题与递归无关,即:array_replace_recursive())


编辑:我在评论中发现了一个注释,表明联合运算符将保留引用,但我没有注意到没有这样做。array_replace()


答案 1

编辑:啊,对不起,我没有注意到论点被颠倒了。答案是肯定的,因为生成的数组始终合并两个数组,但同时优先考虑第一个数组和第二个数组中的值。+array_replace

唯一的实际区别是在性能方面,其中可能更可取,因为当它找到重复项时,它不会替换值;它只是继续前进。另外,它不需要(相对昂贵)函数调用。+


不。 替换元素,同时考虑第一个值:array_replace+

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

引用手册:

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

至于参考文献,它们在这两种情况下都保留了下来。


答案 2

还应该提到的是,如果提供的数组具有非数字键,则array_merge的功能也与array_replace相同。