2012-01-04 27 views
2

我只是想我要梳理这找到了答案: http://svn.php.net/viewvc/php/php-src/PHP数组查找时间

但我无法找到它。在C++ <map>中实现为具有常量键值的平衡二叉搜索树。这很好,你得到O(log n)搜索,插入,删除等运行时。 O(n)枚举时间。

什么我不知道是PHP阵列的底层数据结构。 PHP阵列上有一些SO帖子,他们说“他们做的事情几乎是一样的,所以不用担心!”。不是我所追求的。它是O(1)(散列表)还是O(log n)(平衡二叉树)查找? (例如)

如果有人能帮助我或我指向正确的PHP C源文件,这将是真棒(虽然有点解释是好的 - 我真的不擅长C)。或者,如果你对PHP数组有很好的理解,那么也很好 - 我试图理解整个底层数据结构。

+1

[如何array_keys做价值的搜索?](http://stackoverflow.com/q/8659224/858515) '阅读在接受评论answer.' – ThinkingMonkey 2012-01-04 17:23:09

+1

也许你将是本文http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html – 2012-01-04 17:25:57

回答

2

PHP中的数组实际上是一个有序图。地图是 将值与键关联的类型。这种类型针对几种不同的用途进行了优化;它可以被看作一个阵列,列表(矢量),哈希表 (地图的实施方案),字典,集合,栈, 队列,和可能更多。由于数组值可以是其他数组,因此也可以使用树 和多维数组。

该实现实际上是某种HashTable

- >http://php.net/manual/en/language.types.array.php
- >How is the PHP array implemented on the C level?

+0

这真的不是我要找的答案也有兴趣。所以php决定如何在运行时“处理”(或字节码编译时间)?因为一个有序图是平衡二叉树 - 根据定义不能有'O(1)'查找时间如哈希表 – lollercoaster 2012-01-04 17:19:31

+0

这是一个哈希表。 – MasterCassim 2012-01-04 17:27:56

+0

很好的发现,感谢编辑 – lollercoaster 2012-01-04 17:31:39