在 PHP 中,(假设和是数组$a
$b
$c
)在$a = array_replace($b, $c)
功能上总是与$a = $c + $b
?
我似乎找不到任何表明其他情况的边缘情况。
(只使用一维,这个问题与递归无关,即array_replace_recursive()
:)
编辑:我在评论中发现了一条注释,表明联合运算符将保留引用,但我没有注意到array_replace()
没有这样做。
在 PHP 中,(假设和是数组$a
$b
$c
)在$a = array_replace($b, $c)
功能上总是与$a = $c + $b
?
我似乎找不到任何表明其他情况的边缘情况。
(只使用一维,这个问题与递归无关,即array_replace_recursive()
:)
编辑:我在评论中发现了一条注释,表明联合运算符将保留引用,但我没有注意到array_replace()
没有这样做。
编辑:对不起,我没有注意到论点被颠倒了。那么答案是肯定的,因为结果数组总是将两个数组合并,但是 while+
优先考虑第一个数组中的值和array_replace
第二个数组中的值。
唯一的实际区别在于性能方面,这+
可能更可取,因为当它找到重复项时,它不会替换该值;它只是继续前进。另外,它不需要(相对昂贵的)函数调用。
No.array_replace
替换元素,同时+
考虑第一个值:
<?php
print_r(array_replace([0 => 1], [0 => 2]));
print_r([0 => 1] + [0 => 2]);
大批 ( [0] => 2 ) 大批 ( [0] => 1 )
引用手册:
+ 运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而忽略右侧数组中的匹配元素。
至于引用,它们在两种情况下都被保留。
还应该提到的是,如果提供的数组具有非数字键,则 array_merge 的功能也与 array_replace 相同。