迴圈給陣列賦值 PHP 迴圈引用的問題

2021-10-12 09:41:21 字數 1273 閱讀 7089

為了引出問題, 先來看下面一段**:

<?php $arr = [ 'a', 'b', 'c', 'd',];foreach ($arr as &$each)echo php_eol;foreach ($arr as $each)
這段**很簡單, 輸出陣列的元素兩次, 感覺會輸出兩次 abcd? 不好意思, 輸出結果如下: 

是不是感覺很奇怪?我沒有給陣列賦值啊,陣列的最後乙個元素怎麼在第二次迴圈的時候改變了呢?

再來看下面一段修改過得**:

是不是發現了什麼?

修改each變數會修改arr的最後乙個元素, 這是為什麼呢?

有過c語言使用經驗的大概一看就明白是怎麼回事了.

仔細看上面的foreach迴圈, each變數使用了&符號, 這個符號相當與c中的取址

php的foreach會在每次迴圈時,講當前元素賦值給each, 然後進入迴圈體

當foreach遍歷完成後, each變數沒有釋放而是指向了arr陣列中的最後乙個元素, 所以在後面給each賦值時, 其實改變的時arr陣列的最後乙個元素

到此, 流程已經明白了, 下面還原一下最開始的兩次foreach過程:

在第乙個foreach完成之後, 顯然, each是指向陣列的最後乙個元素的, 下面進入第二個foreach:

分析的結果與之前輸出的結果相同, 我們將第二次foreach的每次變化列印出來, **如下:

<?php $arr = [ 'a', 'b', 'c', 'd',];foreach ($arr as &$each){}foreach ($arr as $each)
結果截圖如下:

結果與我們分析的完全一致, 至此, 完結

我使用的php版本為: 7.2

for迴圈給陣列賦值 010 陣列

1.陣列概述和特點 陣列的定義 陣列是相同型別資料的有序集合。陣列描述的是相同型別的若干個資料,按照一定的先後次序排列組合而成。其中,每乙個資料稱作乙個元素,每個元素可以通過乙個索引 下標 來訪問它們。陣列的三個基本特點 1.長度是確定的。陣列一旦被建立,它的大小就是不可以改變的。2.其元素必須是相...

PHP陣列迴圈

一廂情願,有始無終。含義 中斷。語法 break n 引數 n 表示跳出第幾層迴圈,預設值是1。eg break 2 表示跳出兩層迴圈 迴圈裡巢狀迴圈 含義 表示此次迴圈中斷,重新開始下次新的迴圈 語法 continue n eg continue 2 表示跳出兩層迴圈,再開始新的迴圈 含義 將乙個...

php陣列批量賦值 php給陣列賦值的例項方法

陣列就是乙個鍵值對組成的語言結構,鍵類似於酒店的房間號,值類似於酒店房間裡儲存的東西。如果你去某個酒店住店,服務員會告訴你房間號是多少,具體房間裡有儲存了什麼,那就需要根據房間號進到房間裡才知道了。設定某個變數為乙個空陣列 arr array php有兩種陣列 索引陣列 關聯陣列。索引和關聯兩個詞都...