您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

算法 - PHP的一个小问题

2024/3/28 23:37:30发布5次查看
为什么会这样?为啥前两个下标没引用,而偏偏最后一个用到了,谁能系统的解释一下以及原理。
回复内容:
为什么会这样?为啥前两个下标没引用,而偏偏最后一个用到了,谁能系统的解释一下以及原理。
因为foreach完成之后,最后的$a依然是引用的$array[2],但最后执行了$a=0,这里就相当于$array[2]=0(原来应该是$array[2]=9),所以最后的结果是
[1, 4, 0]
指针相互影响的原因, 貌似php7已经解决了该问题..
php5: •  $a = array(1,2,3); foreach($a as $v) { var_dump(current($a)) } int(2) int(2) int(2)•  $a = array(1,2,3); $b=&$a; foreach($a as $v) { var_dump(current($a))} int(2) int(3) bool(false) •  $a = array(1,2,3); $b=$a; foreach($a as $v) { var_dump(current($a))} int(1) int(1) int(1)
php7: doesn’t use/modify array internal pointer anymore •  $a = array(1,2,3); foreach($a as $v) { var_dump(current($a)) } int(1) int(1) int(1)•  $a = array(1,2,3); $b=&$a; foreach($a as $v) { var_dump(current($a))} int(1) int(1) int(1) •  $a = array(1,2,3); $b=$a; foreach($a as $v) { var_dump(current($a))} int(1) int(1) int(1)
摘至鸟哥
弄明白引用与传值的区别,这个问题也就明白了。
在foreach中$a指的就是$array中的元素,通过循环先指向$array[0],然后是$array[1]...,你可以理解为$array中的元素在循环过程中多了一个$a标签,它们是指向同一个值(物理地址)的。所以在foreach中,$array的元素都被引用了,$a = $a这个运算结果反应在$array数组中。
其中当循环到第三次的时候,通过$a=$a运算,$array[2]的值变为了9,循环结束,但是这是$a还是$array[2]的引用,并没有注销,这是将$a赋值为0,所以$array[2]就变成了0.
所以最终结果就是[1,4,0];
这问题前几天面试的时候正好遇到了,因为下面使用的$a还没有被释放掉,还是$array数组中的引用。所以一般使用foreach的引用传值时最好在后面unset一下咯
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录