• 不一般的PHP数组

    PHP的数组不是常规意义的数组
    服务器君一共花费 18.354 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    不简单的PHP数组

    手册中对PHP数组的定义,本质上是一种键-值映射的关系,算是一种散列表(哈希表):

    PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组元素的值也可以是另一个数组。树形结构和多维数组也是允许的。

    • 也就是说,PHP中的数组,可不是一般常规意义上的数组,借力于哈希表,PHP的数组可谓是“超数组”,能够完成各种一般数组做不了的事。哈希与索引之间巨大的效率区别,这是大家都有共识的。

    PHP数组也是唯一一种也最重要的PHP内建实现的数据结构,功能强大而且底层使用哈希表定位,所以速度极快。

    本质上,PHP的数组和JAVA、C或者C++的数组存在比较大的区别,是一种有序字典或者说通过哈希表映射的规则结构,其开销只是中间的哈希函数算法。

    PHP数组底层实现所采用的哈希算法

    PHP数组底层实现所采用的哈希算法(DJBX33A,目前已知的最好算法),而且用位运算与加法来取代原来的乘法运算。区分开每个桶节点的被除数采用比较大的一个素数(初始值5381)。

    DJBX33A核心算法如下:

    hash(i) = hash(i-1) * 33 + str
    

    Magic Constant 5381(神奇的常量5381):

    • odd number(奇数)
    • prime number(素数)
    • deficient number(亏量)
    • 001/010/100/000/101 b(二进制)
    • 简单的说,我们从最简单的哈希取模算法中就可以知道,哈希算法所实现的目标是,冲突小而且分布均匀。而5381这个数就很符合这个特点。

    小结

    PHP的亮点是数组,所以,学好,用好,精通PHP数组是学好PHP的关键。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] 简单了解Android Fragment 3 个条目
  2. [Python程序设计] Python Web部署的背景知识 9 个条目
  3. [智力开发与知识管理] 整体性学习策略 9 个条目
  4. [PHP程序设计] httpd.conf设置相关 3 个条目
  5. [数据结构] 散列表(哈希表) 13 个条目
  6. [Python程序设计] Python数据类型 11 个条目
  7. [移动开发] Android加载器Loaders 5 个条目
  8. [PHP程序设计] 对输入文件类型的检测 1 个条目
  9. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  10. [移动开发] Android里的ContentValues 2 个条目
  11. [PHP程序设计] PHP中的Hash算法 3 个条目
  12. [数据结构] 图的定义 1 个条目
窗口 -- [资讯]