2014-07-27 50 views
0

我在apache(2.2.22)中測試PHP(5.4.4)的一些代碼。在PHP中添加數組的方法

我想知道PHP在解析下面的代碼時是如何工作的。

<?php 

$x = array(
    'st1' => 'gd1', 
    'st2' => 'gd2' 
); 

$y = array(
    'st1' => 'te1', 
    'st3' => 'te3' 
); 

$z = $x + $y; 
var_dump($z); 

結果是

array(3) { ["st1"]=> string(3) "gd1" ["st2"]=> string(3) "gd2" ["st3"]=> string(3) "te3" } 

但它是如何工作的?

例如(我猜): $ x首先解析並添加到$ z中,而解析$ y時,php解釋器認爲鍵'st1'存在(意味着$ x的優先級高於$ y),並嘗試不要重寫它,並添加'ST3',它的價值。

只是想確認我是否誤會了吧...

+0

[永遠有用的PHP文檔](http://php.net/manual/en/language.operators.array.php)會告訴你execatly發生了什麼事情....它是'$'的聯合x'和'$ y' –

+1

上面的鏈接,這個片段:「+運算符返回附加到左側數組的右側數組;對於兩個數組中存在的鍵,左側數組中的元素將是使用,而右側數組中的匹配元素將被忽略。「 –

+0

對不起,我在閱讀drupal源代碼時一定會不知所措...... – n00b

回答

1

在使用連接操作符的情況下,它僅僅增加了新陣列密鑰到第一陣列。所以基本上,第一個數組是不變的,第二個數組中的新鍵被添加。

如果你想覆蓋與第二第一陣列試試這個:

$x = array(
    'st1' => 'gd1', 
    'st2' => 'gd2' 
); 

$y = array(
    'st1' => 'te1', 
    'st3' => 'te3' 
); 

$z = array_merge($x,$y); 
var_dump($z); 

在這種情況下,如果兩個數組具有相同的指數,後者將覆蓋前者。可以傳遞任意數量的數組進行合併。

1

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

所以,基本上如果你從左到右,你只能在key已經存在的地方添加key/value。

希望得到這個幫助!