<?php // 數組的引用 $a=array(1,2,3,4,5); foreach($a as $key=>&$value) { $value=$value*2; } print_r($a); echo " $key -------------------$value\r\n"; /** * 若是數組中使用了引用, * 有2種方式來處理被引用的值, 做爲一個釋放來對待處理 * 1 使用reset()函數,將數組中的指針指向第一個位置,可是有一個問題是, 那個被引用的變量仍是存在的, * 若是在循環外部, 使用了那個引用的變量,仍是能夠正常的輸出數組的最後一個結果, * 2 使用unset() 函數,能夠釋放一個變量, * 3 問題的衍生, 若是循環中有變量被引用, 這個變量在循環外部能夠被使用, * 若是循環中, 沒有變量被引用, 這個變量還能夠在外部被引用嗎, 主要是想考察變量的做用域. * */ reset($a); echo "$key ++++++++++++ $value\r\n"; unset($value); echo "$key ============== $value\r\n"; /** * 經過如上的測試, 能夠看到, foreach循環中的變量是全局的, 而不是一個局部的. * 最明顯的就是 $key 變量的. * */ foreach($a as $k=>$v) { $v=$v*2; } print_r($a); /** * 沒有加&符號的循環, 會輸出一個臨時的變量值. * * */ echo "$k @@@@@@@@@@@@@@@@@ $v \r\n"; // 臨時數組的引用 foreach([1,2,3,4] as $key=>&$val) { $val=$val*2; } // 此處會有一個語法錯誤, 主要是$val變量的問題, // unset($val); /** * 總結 : * 若是foreach中有引用, * 1 若是程序的下文中還要繼續使用該數組, 建議先reset調整數組中的指針, 避免循環的數據不完整, * 2 若是下文中,要使用那個被引用的變量, 建議先unset, 避免那個變量的初始值不是指望中的. * 3 若是下文中,要使用循環表達式中的值, 建議先unset,主要是key/value字段, 避免變量的初始值不是指望中的, * * */ ?> OUTPUT: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) 4 -------------------10 4 ++++++++++++ 10 Notice: Undefined variable: value in F:\cygwin64\home\Administrator\code\demo16.php on line 30 Call Stack: 0.0010 353768 1. {main}() F:\cygwin64\home\Administrator\code\demo16.php:0 4 ============== Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) 4 @@@@@@@@@@@@@@@@@ 20