亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有關php foreach 引用的問題

有關php foreach 引用的問題

PHP
白豬掌柜的 2019-05-25 17:53:05
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數組類對象值傳遞引用傳遞區別
                            
查看完整回答
反對 回復 2019-05-25
?
江戶川亂折騰

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);
}
輸出:
0a
1s
2d
0->a
1->s
2->d
                            
查看完整回答
反對 回復 2019-05-25
  • 2 回答
  • 0 關注
  • 450 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號