php foreach循环 引用的时候的坑

前两天写递归的时候用到了 静态变量  引用  全局变量

用引用的时候出现了 一点意外  网上查资料 发现一个很好的例子来诠释

据说是金山的面试题

  1. $a = array('a','b','c');  
  2. foreach($a as &$v){}  
  3.   
  4. foreach($a as $v){  
  5.   
  6. }  
  7. var_dump($a);  

答案一般人肯定知道不是a,b,c 要是abc也没什么意义了 

正确的答案是a,b,b  可是这是为什么呢


首先 要准备的知识点  :引用  foreach数组的迭代


第一个循环:数组在循环的时候用了引用 把值赋值给了$v

一直到最后一次循环   这时$v变成了c;

这时候数组没有发生任何变化 还是abc


第二个循环  由于在上一个循环中用了 引用 变量名叫$v  循环完也没有释放掉  所以在以一次循环完之后$v还是存在的  

可以看到  第二次循环用的表达式变量名还是$v  而且共同指向了c 元素 

第二次开始循环 

第一轮:把a赋值给$v   由于$v是用了引用   上次结束循环的时候指向的是c  而且没有释放  这时候数组就变成了 a,b,a   

第二轮:数组把b赋值给$v   同理   数组变成了 a,b,b

第三轮:这时候因为数组变成了a,b,b 所以把b赋值给了 第三个值  因为第三个本来就是b  所以最后的结果  变成了a,b,b

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值