<?php
$arr[2] = 'maxiao';
$arr[1] = 2015;
$arr[0] = 2014;
foreach ($arr as $key => $val) {
echo $val . ' ';
}
使用foreach遍歷,結果是:
maxiao 2015 2014
$length = count($arr);
for($i = 0;$i < $length;$i++) {
echo $arr[$i] . ' ';
}
使用for遍歷,結果是:
2014 2015 maxiao
啊這。。foreach為什麼不是按索引來遍歷?而是按照新增元素的時間來遍歷的。
這涉及到來php陣列的底層實現,簡單來說,php資料底層是一個hashtable(用連結串列的方式來解決hash衝突)+ 雙向連結串列進行組織的資料,而採用foreach遍歷陣列的話,會根據連結串列來遍歷,連結串列的順序是新增元素的順序。而如果用for來遍歷陣列的話,使用的是hashtable來查詢元素。所以順序是索引的順序。大佬的講解:
https://www.laruence.com/2009/08/23/1065.html。
ps:本來想畫個結構圖的,太麻煩了,略。
本作品採用《CC 協議》,轉載必須註明作者和本文連結