PHP数组实现方式

时间:2019-10-08作者:klpeng分类:IT综合浏览:334评论:0

数组是PHP最常用,最强大的数据类型了。我们知道PHP是C写的,而C语言当中数组是一块连续的存储空间,并且只能以数字作为数组下标。PHP当中则可以使用关联数组,主要是因为PHP使用哈希表来作为数组的存储方式。
简单来说,哈希表就是将我们动态分配的数组的下标通过哈希函数算出一个值,然后通过一张转换表(如果直接存放,可能会顺序不对),将真正的数据存放到Bucket结构体当中。正是因为这个转换的操作,所以PHP中使用foreach会比使用for更快,foreach直接遍历的是存放真实数据的Bucket结构部分。
PHP在实现数组类型主要使用了2个结构体一个hashTable,一个Bucket。通过链接法来解决hash冲突。当数据达到一定量,或者哈希函数设计不合理,就会发生哈希冲突,PHP使用的是time33哈希算法。因为算法已知,很多黑客可以通过这个来对网站或者程序进行攻击(dos攻击),PHP采用的是禁止用户提交的数据量来解决这个问题。。
当发生哈希冲突时,需要在链表中(为了解决冲突的双向链表)比较当前节点的键名是否正确,否则继续向下查找。PHP7中链表结构并没像传统链表一样在在内存中分散存储。我们直接读取 arData 整个数组,而不是通过堆(heap)获取内存地址分散的指针。这是 PHP7 性能提升的一个重要点。

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢