加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 解决循环引用,php 循环引用

发布时间:2022-09-12 17:08:15 所属栏目:PHP教程 来源:
导读:  昨天遇到了一个引用的问题

  结果是什么,第一时间我也是想当然的回答为[1,2,3]

  但是实际的结果却让我大跌眼镜 正确的结果为[2,3,3]

  经过我一番思考和讨论 我大概分析了其运行的流程和为什
  昨天遇到了一个引用的问题
 
  结果是什么,第一时间我也是想当然的回答为[1,2,3]
 
  但是实际的结果却让我大跌眼镜 正确的结果为[2,3,3]
 
  经过我一番思考和讨论 我大概分析了其运行的流程和为什么会是[2,3,3]这个结果
 
  首先这个引用是两个或多个变量指向同一个内存地址
 
  $a = 5;
 
  $b = &$a;
 
  这样他们便指向同一个内存地址不管你改变$a还是$b得值,另外一个值都会跟着改变
 
  现在让我回到那个循环
 
  $arr = [1,2,3];
 
  foreach ($arr as $key => $value) {
 
  $value = &$arr[$key];
 
  print_r($arr);
 
  }
 
  从代码可以看出$value指向了数组中每个元素得地址,如果$value得值发生了变化即数组中得值也会变化
 
  第一次循环
 
  $keyt=0 $value = 1 1 = $arr[0] 此时$value这个变量已经指向了$arr数组中第一个元素得位置就是1得内存位置
 
  所以当一次循环结束打印得数组为
 
  第二次循环
 
  这是重点,因为第一次循环$value这个变量已经指向了$arr数组中第一个元素得位置就是1得内存位置,当第二循环刚刚开始,还没有运行到$value = &$arr[$key];这行,此时第二次循环已经把 $value得值变为了2,因为第一次循环 $value指向数组$arr元素1的位置,所以当第二次循环刚开始$value得值变为了2,所以$arr中第一元素就变为2php循环,继续往下运行到$value = &$arr[$key]; 2 = &$arr[1]此时$value指向得地址就变为$arr第二个元素得内存位置,同时把第二个元素赋值为2
 
  第三次循环$value已经指向了数组$arr第二个元素得位置,所以循环刚开始$value得值就被赋值了3,即数组得第二个元素是3,此时再往下运行$value = &$arr[$key]; 3= &$arr[2] 素组得第三个元素还是3,$value指向数组得第三个元素得位置
 
  到此整个数组循环结束结果就是[2,3,3] 同理如果数组再加一个4必然回事[2,3,4,4]
 
  总结
 
  当第一次循环结束时,建立多对一得内存地址映射,以后得每次循环都会先改变$value对应内存地址得值,即数组元素得值,然后$value再指向数组下一个元素得内存地址
 

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!