foreach遍曆 是如何遍曆的 指標問題

來源:互聯網
上載者:User
foreach遍曆是對原數組的拷貝問題

比如$a1=array('a','b','c');
foreach($a1 as $k=>$v){
echo $v,'
';
if($k==1){
$a1[3] ='d';
}
}
var_dump(current($a1));
數組a1在經過foreach遍曆時 foreach遍曆的是原數組的拷貝 我想問一下 它是先把原數組整體拷貝完後再遍曆還是在原數組上一個一個元素進行複製儲存在變數$k $v中 存一個然後echo輸出一個 看了foreach執行的流程圖 認為是第二種。

如果我按第二種法方理解 那麼當if($k==1時對原數組進行了寫操作 此時foreach會在指標指向第三個元素時進行了真實的拷貝) 在這裡我困惑的是foreach的執行流程圖要靠原數組的指標一個一個複製儲存輸出來完成的 而這段代碼最後輸出$a1的指標卻是指向第三個元素C 就不動了 那麼按照我第二種理解 指標不動如何完成foreach的遍曆呢?

難道是這樣理解嗎:就是$a1複製一份出來比如是$a2 foreach遍曆的實際上是$a2 這樣就可以理解老師所講的這句話:數組遍曆的是原數組的拷貝

就是說先整體把$a1複製一份出來 再對$a2的一個一個元素進行儲存到變數裡然後輸出嗎




回複討論(解決方案)

數組有兩套指標,一套是你能看到的下標、關聯鍵,另一套是內部的你不能看到的,但可以用next、perv、end等函數操作
foreach 只是把數組的內部指標的副本傳了進去,所以你在 foreach 中修改、添加、刪除的數群組成員,在 foreach 中都是表現不出來的。因為你並沒有修改到那個傳進去的副本

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.