background image

PHP 之数组(遍历顺序)转自 Laruence

经常会有人问我

, PHP 的数组, 如果用

foreach

来访问

, 遍历的顺序是固定的么? 以什么顺序

遍历呢

?下面看 Laruence 整理的

经常会有人问我

, PHP 的数组, 如果用

foreach

来访问

, 遍历的顺序是固定的么? 以什么顺序

遍历呢

比如

代码如下

:

 
<?php 

$arr

['laruence'] = 'huixinchen'; 

$arr

['yahoo'] = 2007; 

$arr

['baidu'] = 2008; 

foreach

 (

$arr

 

as

 

$key

 => 

$val

) { 

//结果是什么? 


 
又比如

代码如下

:

 
<?php 

$arr

[2] = 'huixinchen'; 

$arr

[1] = 2007; 

$arr

[0] = 2008; 

foreach

 (

$arr

 

as

 

$key

 => 

$val

) { 

//现在结果又是什么? 


 
要完全了解清楚这个问题

, 我想首先应该要大家了解 PHP 数组的内部实现结构……… 

 
PHP 的数组 

PHP 中, 数组是用一种 HASH 结构(HashTable)来实现的, PHP 使用了一些机制, 使得可以

O(1)的时间复杂度下实现数组的增删, 并同时支持线性遍历和随机访问. 

 
之前的文章中也讨论过

, PHP 的 HASH 算法, 基于此, 我们做进一步的延伸. 

 
认识

HashTable 之前, 首先让我们看看 HashTable 的结构定义, 我加了注释方便大家理解: 

代码如下

:

 
typedef struct _hashtable { 
uint nTableSize; 

/* 散列表大小, Hash 值的区间 */