array_replace()与PHP中的union运算符

时间:2011-12-16 16:48:59

标签: php arrays merging-data

在PHP中,(假设$a$b$c是数组$a = array_replace($b, $c)在功能上始终与{{1}相同}?

我似乎无法找到任何可能表明的边缘情况。

只使用一个维度,这个问题与递归无关,即:$a = $c + $b


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

2 个答案:

答案 0 :(得分:8)

编辑:对不起,我没有注意到论点被颠倒了。答案是肯定的,因为结果数组总是合并了两个数组,但+优先考虑第一个数组中的值,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
)

cite手册:

  

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

至于参考文献,两种情况都会保留它们。

答案 1 :(得分:6)

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