电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

foreach使用引用注意的问题


发布日期:2021/7/14
 

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

PHP代码
  1. foreach($arras&$value){
  2. $value=;
  3. }

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

PHP代码
  1. <?php
  2. $arr=array(abc);
  3. $arr=array(def);
  4. foreach($arras&$value){//习惯用$value或$val
  5. $value=;
  6. }
  7. //都处理完毕我们在页面模版输出首先输出$arr
  8. foreach($arras$value){//习惯用$value或$val
  9. //echo$value;
  10. }
  11. //然后再这样输出$arr;
  12. foreach($arras$value){//习惯用$value或$val
  13. echo$value/n;
  14. }
  15. ?>

大家看看输出的结果是否和期望的一样这里结果是

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($arras&$value){
  2. $value=;
  3. }
  4. unset($value);

上一篇:下拉列表多级联动dropDownList示例代码

下一篇:解析curl提交GET,POST,Cookie的简单方法