1. 程式人生 > >php 陣列 引用賦值 陣列指標的幾個函式 遍歷陣列

php 陣列 引用賦值 陣列指標的幾個函式 遍歷陣列

1. 複製一個數組,就是把一個數組賦值給一個變數便可。會把陣列指標位置一同複製。這裡面有兩種情況。一,指標位置合法,這時直接複製,無影響。二,原陣列指標位置非法時,“新”陣列指標會初始化。(這裡的新字為什麼要加引號?請看下文)先看例子:
php <wbr>陣列複製和遍歷

出現這種情況好像不對?$arr2 難道不是新陣列?新陣列的陣列指標應該重置了啊。這裡應該注意了。這涉及到 php 內部優化原理。
這裡 $arr2 = $arr1 ,在倆變數都沒發生寫操作時,他們其實引用的是同一個記憶體單元,即引用賦值。在其中一個變數發生寫操作後,記憶體單元會複製一份,發生改變的變數會去引用它,並把陣列指標初始化。這裡 current() 函式發生一個寫操作,所以 $arr1 會去引用複製的記憶體單元,並且指標初始化。

這個php內部優化是對值傳遞的優化。如果是一個變數,那不用討論,因為涉及了陣列指標,容易出錯,所以討論。注意陣列值傳遞操作後,陣列指標的變化便可。
2. 關於 php 陣列指標的幾個函式:    current() 獲得當前指標所在元素的值。
   key()     獲得當前的鍵。    next()    指標後移一位。    prev()    指標前移一位。    reset()   指標重置到第一位。    end()     指標移動到最後一位。
3. foreach 的執行流程。它遍歷的其實是一個數組的拷貝。在迴圈體中對陣列賦值,其實是對原陣列的改變,不會影響到當前被遍歷的陣列。
4. 在 foreach( $arr as $k => & $v) 中 $v 可以是引用傳遞。這時的 $v 的值會影響到原陣列的值。$k 不可以是引用傳遞。
5. count() 計算陣列長度。第二個引數為 true 時,統計多維陣列長度。注意多維陣列的長度。
6. 真正的遍歷陣列是先獲得陣列元素,然後獲得鍵與值。而不是先獲得鍵,然後獲得值,這不是遍歷。
7. foreach 會先把指標初始化,然後給鍵和值變數賦值,之後移動指標,最後執行程式體。
8. each 包含 key,current,next 三個功能。返回一個索引陣列和關聯陣列的集合陣列。