熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

foreach使用引用注意的問題

2013-11-15 12:32:21  來源: PHP編程 

  foreach 通過在 $value 之前加上 & 很容易就能修改數組的單元

PHP代碼
  1. foreach($arr as &$value){   
  2.  $value ;   
  3. }  

  但這個用法也很容易造成錯誤而且也不容易找
看例子更直截了當

PHP代碼
  1. <?php   
  2. $arr = array(abc);   
  3. $arr = array(d e f);   
  4.   
  5. foreach($arr as &$value){//習慣用$value或$val   
  6.  $value ;   
  7. }   
  8.   
  9. //都處理完畢我們在頁面模版輸出首先輸出$arr   
  10. foreach($arr as $value){//習慣用$value或$val   
  11.  //echo $value;   
  12. }   
  13. //然後再這樣輸出 $arr;   
  14. foreach($arr as $value){//習慣用$value或$val   
  15.  echo $value /n;   
  16. }   
  17. ?>  

  大家看看輸出的結果是否和期望的一樣這裡結果是

  a
b
b

  結果和我期待的不一樣這個就是引用引起的問題
在 foreach($arr as &$value) 數組遍歷到最後引用關系並沒有斷開這是等同於 $value 與 $arr 的最後一個單元即 $arr[] 引用

  再到 foreach($arr as $value)$value的值一直隨數組單元的值變由於引用關系沒有斷開$arr[] 的值也跟著變化一直到$arr遍歷完這是$value的值為f所以$arr[]值也為f
這時$arr的值應為

  Array
(
    [] => a
    [] => b
    [] => f
)

  這個和我們看到的最終輸出結果又不一樣再到 foreach($arr as $value)同理這時 $arr[]的值也隨著 $value 變化當遍歷到key為即$arr[]時$arr[]的值也變成 $arr[] 的值即是 b然後再遍歷到key為時 $arr[]的值又成了 $arr[] 的值也就是 b就是輸出時的結果

  所以在 foreach 使用引用時要注意了也可以在處理完後立即斷開引用關系後面就不會有上述情況了

PHP代碼
  1. foreach($arr as &$value){   
  2.  $value ;   
  3. }   
  4. unset($value);  

From:http://tw.wingwit.com/Article/program/PHP/201311/21142.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.