手册中对PHP数组的定义,本质上是一种键-值映射的关系,算是一种散列表(哈希表):
PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组元素的值也可以是另一个数组。树形结构和多维数组也是允许的。
PHP数组也是唯一一种也最重要的PHP内建实现的数据结构,功能强大而且底层使用哈希表定位,所以速度极快。
本质上,PHP的数组和JAVA、C或者C++的数组存在比较大的区别,是一种有序字典或者说通过哈希表映射的规则结构,其开销只是中间的哈希函数算法。
PHP数组底层实现所采用的哈希算法(DJBX33A,目前已知的最好算法),而且用位运算与加法来取代原来的乘法运算。区分开每个桶节点的被除数采用比较大的一个素数(初始值5381)。
DJBX33A核心算法如下:
hash(i) = hash(i-1) * 33 + str
Magic Constant 5381(神奇的常量5381):
PHP的亮点是数组,所以,学好,用好,精通PHP数组是学好PHP的关键。
现代魔法 推荐于 2013-02-27 10:23