PHP数组实现方式

数组是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 性能提升的一个重要点。

发布了33 篇原创文章 · 获赞 1 · 访问量 8316

猜你喜欢

转载自blog.csdn.net/u012914309/article/details/102388646