php高级基础---php在foreach循环后留下数组的引用问题

eg:

  1. <?php
  2. $arr = array(1,2,3,4);
  3. foreach($arr as $key => &$value){
  4. }
  5. foreach($arr as $key => $value){
  6. }
  7. ?>

result:

  1. [1,2,3,3]

解释:

  1. 1. foreach不是块级域,数组引用结束,$key , $value 并没有释放内存
  2. 2. 当第一次引用循环结束的时候,$value指向数组最后一个元素4
  3. 3. 当第二次开始循环 (此时$value 已经是指向最后一个元素,是引用)
  4. 循环4 数组的变化分别是:
  5. 1 -> [1,2,3,4]
  6. 2 -> [1,2,3,4]
  7. 3 -> [1,2,3,3]
第三次value指向最后一个元素3 但是value是全局引用在上次循环指向了最后一个元素 所以value=3的时候 也会把最后一个元素的值改为3
  1. 4 -> [1,2,3,3]

注意事项:

  1. 1. foreach 实现原理有个内部指针的概念
  2. 2. &的foreach循环结束 指针会指向最后一个元素

如何避免:
在用&foreach循环后 unset ($value)

2019-08-01: 今天看到很多人在关注这个问题,关于鸟哥解释的php源码分析的foreach,大家感兴趣的可以去看看:http://www.laruence.com/2008/11/20/630.html

点赞 ( 5 )

0 条评论

发表评论

人生在世,错别字在所难免,无需纠正。

插入图片
s
返回顶部