foreach使用&對數組arr2遍歷之后,再次對數組遍歷,得到的結果很困惑,不知哪位大神能說下&遍歷指針是怎么移動的呢。代碼如下:$arr2=['a','s','d'];foreach($arr2as$k=>&$v){echo$k."".$v."";}//unset($v);foreach($arr2as$k=>$v){echo$k."";echo$v."".current($arr2)."";}結果:0a1s2d0aa1sa2sa為什么第二次遍歷的時候指針移動到s就停止了呢
2 回答

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
原因:在第一次的foreach中采取了引用傳遞的方式,第一次循環$v指向$arr2[0]的存儲空間,第二次指向>$arr2[1]的存儲空間,循環結束則指向$arr2[2]的存儲空間;在第二次的foreach中采取了值傳遞的方式,第一次循環給$v賦值了a,即給$arr2[2]賦值了a,第二次同上,$arr2[2]的值變為了$arr2[1]的值,則$arr2變成了[a,s,s],所以是數組的最后一個元素變成了倒數第二個元素的值解決辦法:在第一個foreach結束后加一句unset($v);第二次foreach循環不用$v換個其他名字的變量參考:php中用foreach改變數組的值的問題php數組類對象值傳遞引用傳遞區別

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
或者你可以這么做:$arr2=['a','s','d'];foreach($arr2as$k=>&$v){echo$k."".$v.PHP_EOL;}while(current($arr2)){echokey($arr2).'->'.current($arr2).PHP_EOL;next($arr2);}輸出:0a1s2d0->a1->s2->d
- 2 回答
- 0 關注
- 450 瀏覽
添加回答
舉報
0/150
提交
取消