2016-05-20 20 views
1

我使用foreach循環與引用,即:foreach($elements as &$item)的var_dump輸出使用的foreach參考循環

現在,當我使用var_dump($elements);foreach()後,最後一個元素總是有一個&字符前面加上它的變型(&string&array&boolean等)。

輸出示例:

array(4) { 
    [0]=> 
    string(4) "this" 
    [1]=> 
    string(2) "is" 
    [2]=> 
    string(2) "an" 
    [3]=> 
    &string(7) "example" 
} 

這是爲什麼呢?它有什麼功能/影響?

+2

這是地址指針。你可以'unset($ item)'來避免這個 – Thamilan

+0

你在foreach循環中做了什麼? –

+0

@thamilian啊好吧,我沒有意識到這一點,你可以補充說,作爲答案? – xorinzor

回答

2

它是地址指針。你可以通過unset($item)來避免這種情況。

回答你的問題:

1.這是爲什麼

您可以找到manual

警告參考$值的參考和在foreach循環之後,最後一個數組元素甚至保留爲 。建議通過unset()銷燬它。

這在您在foreach循環中使用引用時出現。該引用駐留在最後一個數組元素中。

2.哪些功能/影響,它有

考慮這種情況:

<?php 
$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
} 

print_r($arr); 

foreach ($arr as $value) { 
} 

print_r($arr); 

你的輸出將是:

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

如果使用unset

<?php 
$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
} 

print_r($arr); 
unset($value); <--- 

foreach ($arr as $value) { 
} 

print_r($arr); 

結果將是:

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