知识大全 foreach使用引用注意的问题

Posted

篇首语:讨厌自己明明不甘平凡,却又不好好努力。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 foreach使用引用注意的问题相关的知识,希望对你有一定的参考价值。

  foreach 通过在 $value 之前加上 & 很容易就能修改数组的单元 如

PHP代码
  1. foreach($arr as &$value)   
  2.  $value  =  ;   
  3.   

  但这个用法也很容易造成错误 而且也不容易找 看例子更直截了当

PHP代码
  1. <?php   
  2. $arr = array( a b c );   
  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 了 就是输出时的结果

PHP代码
  1. foreach($arr as &$value)   
  2.  $value  =  ;   
  3.   
  4. unset($value);  
cha138/Article/program/PHP/201311/21142

相关参考