php的foreach指针

本文深入探讨了PHP中foreach循环的引用和非引用遍历方式,详细解释了这两种遍历方式如何影响数组元素的内存地址及变量的值。通过具体实例,阐述了引用遍历下数组元素值的改变过程,以及非引用遍历时变量值的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$arr = [1,2,3];
foreach ($arr as &$value){}
foreach ($arr as $value){};

echo $key;
echo $value;

echo "<pre>";
print_r($arr);exit;//1,2,2
原因如下:
无论foreach($arr as $key=>$value){}还是foreach ($arr as $key=>&$value){},最后都无法释放$key和$value变量指向的
内存地址。也就是说无论他们怎么遍历最后$key = count($arr),$value = $arr[count($arr)-1];
1:引用遍历
由于是引用不是复制,所以最后$value变量和$arr[count($arr)-1]这个变量指向了同一个内存地址。两者一改都改。
所以foreach ($arr as &$value){}执行后$value 和 $arr[2]指向相同的内存地址。
再执行foreach ($arr as $value){}的时候
指针第一次指向1的内存地址,此时$value = 1;所以$arr[2] = 1;此时打印$arr = [1,2,1];
第二次遍历指针指向2的内存地址,此时$value又被重新赋值为2,此时$arr[2] = 2; 此时打印$arr = [1,2,2];
第三次遍历此时指针指向3的内存地址里面的值再第二次遍历的时候已经变成了2,此时$value = 2;此时打印$arr = [1,2,2];
2:非引用遍历
非引用遍历是复制出$arr的值给$value;两者指向不同的内存地址,所以改变$value或者$arr对其他没有任何的影响。

  

转载于:https://www.cnblogs.com/xin-jun/p/9907808.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值