如此,可方便直接對值修改:
foreach ($arr as &$v){ $v = $v*10; } .....
但這樣使用時須注意,最後須記得將 reference 變數 unset,
避免 reference 變數仍指到陣列的元素,不注意時,可能造成非預期的修改。
$arr = array("A", "B", "C"); foreach ($arr as &$v){ } var_dump($arr); foreach ($arr as $key => $v) { echo "{$key} => {$v}\n"; var_dump($arr); }輸出結果,可發現第2次的freach,最後一個元素一直改變,
因為 reference 變數 $v 還一直代表著陣列最後一個元素,所以一直被重新賦值。
array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> &string(1) "C" } 0 => A array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> &string(1) "A" } 1 => B array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> &string(1) "B" } 2 => B array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> &string(1) "B" }
使用完馬上unset(&$v),可避免非預期的最後一個元素值一直改變
$arr = array("A", "B", "C"); foreach ($arr as &$v){ } unset($v); var_dump($arr); foreach ($arr as $key => $v) { echo "{$key} => {$v}\n"; var_dump($arr); }輸出結果
array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" } 0 => A array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" } 1 => B array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" } 2 => C array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" }
參考:
PHP: foreach - Manual
沒有留言:
張貼留言