範例:
$arr = array("1"=>"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value) { echo $key."=>".$value."\n"; }
結果如下:
1=>111 2=>222 3=>333
2,稍作修改:
foreach($arr as $key=>$value) { //echo $key."=>".$value."\n"; $key = &$arr[$key]; } print_r($arr);
結果如下:
Array ( [1] => 2 [2] => 3 [3] => 333 )
程式碼解釋:
我們發現,原來的陣列被修改了,是為什麼呢?我們來研究一下。
程式碼中關鍵的地方是:$key = &$arr[$key];
$key 為 $arr[$key] 的引用,也就是,當$key 被修改的時候,$arr[$key] 也被修改為對應的值。
首先,我們要了解一下,foreach 的原理,它是將數組的值,分別賦值給$key 和$value ;
所以,$key ,$value 也是普通的一個變數。
接著分析,第一次迴圈時,$key = &$arr[$key];意思是 &$arr[1] 指向$key 這個變數。
foreach 循環到第二遍的時候,首先,$key 被賦值為2,此時,再關註一下,$key = &$arr[$key];
結果是:$arr[1] 被賦值為此時的新的$key ,也就是2.
第二遍循環結束後,原來的陣列變成:
Array ( [1] => 2 [2] => 222 [3] => 333 )
同理,第三次循環結束後,則為:
Array ( [1] => 2 [2] => 3 [3] => 333 )
到此,已經大概說明白了。
3,為了更清楚的明白,foreach 中的賦值過程,我們可以這樣:
$arr = array("1"=>"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value) { $key = &$arr[$key]; $key = "hello"; unset($key); print_r($arr); }
結果如下:
Array ( [1] => hello [2] => 222 [3] => 333 ) Array ( [1] => hello [2] => hello [3] => 333 ) Array ( [1] => hello [2] => hello [3] => hello )
程式碼解釋:
#我們直接在每次循環中,給$key 賦值為「hello 」,為了不影響,然後,把$key 變數釋放掉。
這樣應該,就比較清楚了吧。
以上是php中foreach引用出現的問題分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!