2012-05-27 16 views
2

爲什麼在以下兩種情況下通過print_r獲得不同的輸出!!這是在PHP中的錯誤? PHP無法執行稱爲內部函數的複雜分層函數嗎?分層php函數exectuion錯誤!這是什麼?

CASE 1 : 
$aa='2,3,4,5,5,5,'; 
$aa=array_unique(explode(',',$aa)); 
array_pop($aa); 
print_r($aa); 

CASE 2 : 
$aa='2,3,4,5,5,5,'; 
array_pop(array_unique(explode(',',$aa))); 
print_r($aa) 

在第一種情況中,輸出是分解數組:

Array ([0] => 2 [1] => 3 [2] => 4 [3] => 5) 

在第二種情況下,輸出爲字符串:

2,3,4,5,5,5, 
+3

如果你的第一個問題就是問是否有在工具中的錯誤,答案很可能是否定的。 –

+0

輸出是什麼? – Leri

+0

此外,它會有助於打印*你得到什麼輸出。 –

回答

7

這是因爲array_pop改變其輸入,並且你傳遞給它一個臨時變量(不是$aa)。

請注意文檔中的簽名:array_pop (array &$array) - &表示它通過引用接受參數,並且它改變該輸入變量。

比較與其他兩個功能:

array explode (string $delimiter , string $string , int $limit)

array array_unique (array $array , int $sort_flags = SORT_STRING)

在第一種情況下,你更新$aaarray_unique()輸出,然後傳遞到array_pop到被改變。

在所述第二殼體的array_unique()輸出將是相同的,但是這個臨時值不被分配給一個變量&因此array_pop被調用後它的遺忘。

值得注意的是,在PHP中(不像說C++),passing by reference is actually slower than passing by value,因此只用於修改函數的輸入參數。

+0

哦,是的!得到它了!謝謝! – Vishal

+0

這是真的@從此處!感謝您的幫助!終於明白了:) – Vishal

+0

是的,我知道通過引用傳遞很慢,我很少使用它。默認情況下使用上面的case1! – Vishal

0

在第一種情況下,你改變變量作爲2個線BS與賦值操作符分配一個新值=