2012-01-04 77 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