php的foreach指針


$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對其他沒有任何的影響。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM