温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php数组底层实现原理是什么

发布时间:2022-03-24 13:55:22 来源:亿速云 阅读:421 作者:小新 栏目:web开发

这篇文章主要介绍php数组底层实现原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php 数组底层实现原理

1、底层实现是通过散列表(hash table) + 双向链表(解决hash冲突)

  • hashtable:将不同的关键字(key)通过映射函数计算得到散列值(Bucket->h) 从而直接索引到对应的Bucket

  • hash表保存当前循环的指针,所以foreach 比for更快

  • Bucket:保存数组元素的key和value,以及散列值h

2、如何保证有序性

  • 1. 散列函数和元素数组(Bucket)中间添加一层大小和存储元素数组相同的映射表。

  • 2. 用于存储元素在实际存储数组中的下标

  • 3. 元素按照映射表的先后顺序插入实际存储数组中

  • 4. 映射表只是原理上的思路,实际上并不会有实际的映射表,而是初始化的时候分配Bucket内存的同时,还会分配相同数量的 uint32_t 大小的空间,然后将 arData 偏移到存储元素数组的位置。

3、解决hash重复(php使用的链表法):

  • 1. 链表法:不同关键字指向同一个单元时,使用链表保存关键字(遍历链表匹配key)

  • 2. 开放寻址法:当关键字指向已经存在数据的单元的时候,继续寻找其他单元,直到找到可用单元(占用其他单元位置,更容易出现hash冲突,性能下降)

4、基础知识

  • 链表:队列、栈、双向链表、

  • 链表    :元素 + 指向下一元素的指针

  • 双向链表:指向上一元素的指针 + 元素 + 指向下一元素的指针

以上是“php数组底层实现原理是什么”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI