如何在PHP中实现关联数组?
有人能解释一下PHP是如何实现关联数组的吗?PHP使用什么底层数据结构?PHP是否对密钥进行散列并将其存储在某种散列映射中?我很好奇,因为我想知道关联数组在插入和搜索键时的性能如何。好吧,无论如何,所有的PHP数组都是关联数组。根据各种网络论坛的消息来源,都是哈希表: 如果您想确定,请阅读源代码,然后编译它,但请确保您可以(警告:PDF,不相关,但非常酷)。@EBGreen是正确的 这会给您带来一些有趣的性能问题,特别是当将数组视为列表并使用[](array add)运算符时。PHP似乎不会缓存最大的数字键并向其中添加一个,相反,它似乎会遍历所有键以查找下一个数字键应该是什么。我已经用python重写了脚本,因为PHP的数组即列表性能很差如何在PHP中实现关联数组?,php,arrays,php-internals,Php,Arrays,Php Internals,有人能解释一下PHP是如何实现关联数组的吗?PHP使用什么底层数据结构?PHP是否对密钥进行散列并将其存储在某种散列映射中?我很好奇,因为我想知道关联数组在插入和搜索键时的性能如何。好吧,无论如何,所有的PHP数组都是关联数组。根据各种网络论坛的消息来源,都是哈希表: 如果您想确定,请阅读源代码,然后编译它,但请确保您可以(警告:PDF,不相关,但非常酷)。@EBGreen是正确的 这会给您带来一些有趣的性能问题,特别是当将数组视为列表并使用[](array add)运算符时。PHP似乎不会缓
关联数组具有标准的dict/hash性能开销 这是一个哈希表。类型声明和散列函数如下:
spl(标准php库)中有一个轻量级数组和一个链表。投票率最高的答案链接被破坏,没有给出太多解释 PHP是用C编写的,底层结构只是一个C数组。C数组只是内存块。C数组中的索引必须是连续的,不能有索引0和其后的索引1000。为了使关联数组键正常工作,在将它们添加到C数组之前,会通过哈希函数将它们转换为适当的C索引 为了得到完整的解释,我发现这个链接提供了更多的信息
你确定这一点吗?我刚刚在一个包含1000个条目的测试数组上运行了基准测试(一个接一个地复制到一个新数组),如果您不为新数组指定键,那么它的速度会持续提高7%(在PHP5.2.6上),可能是他们最近更改了它。我在做这项工作时使用的是5.1。当你谈论10k或更多条目时,PHP的数组非常糟糕。好吧,事实并非如此,请比较:@RickyMason。通常情况下,您可能不会这样做,但对于彻底的测试,计算10、100、1k和10k的每项时间确实会突出可伸缩性性能问题,特别是如果可能需要处理10k。我将把此链接留给其他人来完成,但您可以查看PHP的实际C源代码,源代码已移动到GitHub: