2011-12-16 46 views
14

在PHP union運算符,(鑑於$a$b$c是數組)是$a = array_replace($b, $c)總是功能上等同於$a = $c + $barray_replace()與在PHP

我似乎無法找到任何邊界情況,否則會指出。

只是一個方面的工作,這個問題並不關心遞歸,即:array_replace_recursive()


編輯:我發現在評論一張紙條,表明聯合運營將保留參考,但我沒有注意到array_replace()沒有這樣做。

回答

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手動:

+運算返回右手陣列附加到左側數組;對於這兩個數組中存在的鍵,將使用左側數組中的元素,並忽略右側數組中的匹配元素。

至於參考文獻,它們都保存在這兩種情況下。

+2

看! PHP 5.4中新的簡化數組語法! – BoltClock 2011-12-16 16:59:33

+0

壯觀,謝謝@Artefacto - 我想他們是,雖然我關心一些無證的邊緣案例(*因爲我注意到PHP有點臭名昭着*) – Dan 2011-12-16 17:27:10

6

還應該提及的是,如果提供的陣列具有非數字鍵,array_merge的功能與array_replace 相同。