使用foreach的時候出現了一個奇怪的現象,其中一個數組變量的最後一個值莫名其妙被修改了,查看php手冊foreach說明發現php
Warning數組
數組最後一個元素的 $value 引用在 foreach 循環以後仍會保留。建議使用 unset() 來將其銷燬。spa
有這樣的警告。使用unset 方法或使用其餘變量名稱。.net
例如指針
$a=[1,2]; foreach($a as $key=>$value){ $a[$key]=$value+1; } echo $value;//輸出 2
若是在$a中使用了指針,則會影響後面同名的變量的值,結果以下:blog
$a=[1,2]; $b=[3,4]; foreach($a as $key=>&$value){ $a[$key]=$value+1; } print_r($a); foreach($b as $value){ $value++; } print_r($a); print_r($b); 輸出以下 Array ( [0] => 2 [1] => 3 ) Array ( [0] => 2 [1] => 5 ) Array ( [0] => 3 [1] => 4 )
若是都使用指針或使用unset,則不受影響get
$a=[1,2]; $b=[3,4]; foreach($a as $key=>&$value){ $a[$key]=$value+1; } print_r($a); foreach($b as &$value){ $value++; } print_r($a); print_r($b); 輸入以下 Array ( [0] => 2 [1] => 3 ) 3Array ( [0] => 2 [1] => 3 ) Array ( [0] => 4 [1] => 5 )
使用unsetio
$a=[1,2]; $b=[3,4]; foreach($a as $key=>&$value){ $a[$key]=$value+1; } print_r($a); unset($key,$value); foreach($b as $key=>$value){ $b[$key]=$value+1; } print_r($a); print_r($b); 輸出以下 Array ( [0] => 2 [1] => 3 ) Array ( [0] => 2 [1] => 3 ) Array ( [0] => 4 [1] => 5 )