array_replace()与PHP中的union运算符

Dan*_*ugg 15 php arrays merging-data

在PHP中,(给定$a,$b并且$c是数组)在$a = array_replace($b, $c)功能上总是相同的$a = $c + $b

我似乎无法找到任何表明不同的边缘情况.

(只是一维的工作,这个问题并不关心递归,即:array_replace_recursive())


编辑:我在注释中发现了一条注释,表明union运算符将保留引用,但我没有注意到array_replace()没有这样做.

Art*_*cto 8

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

唯一的实际差异在于性能,+ 可能更可取,因为当它找到重复时,它不会取代价值; 它继续前进.另外,它不需要(相对昂贵的)函数调用.


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

<?php
print_r(array_replace([0 => 1], [0 => 2]));
print_r([0 => 1] + [0 => 2]);
Run Code Online (Sandbox Code Playgroud)
Array
(
    [0] => 2
)
Array
(
    [0] => 1
)

手册:

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

至于参考,它们在两种情况下都被保留.

  • 看!PHP 5.4中新的速记数组语法! (2认同)

小智 6

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