<?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:本来想画个结构图的,太麻烦了,略。