2012-01-04 9 views
2

ルックアップ: http://svn.php.net/viewvc/php/php-src/PHPの配列は、私はちょうど私が答えを見つけるために、このを通じてくしだろうと思った時

しかし、私はそれを見つけることができませんでした。 C++で<map>は、constキー値を持つ平衡二分探索木として実装されています。これは素晴らしいです、あなたはO(log n)検索、挿入、削除などのランタイムを取得します。 O(n)列挙時間。

私はPHP配列の基礎となるデータ構造が不思議です。 PHPの配列には、「よく彼らは同じことをしているので、心配しないでください!」と書かれています。私が何をしたかではない。 O(1)(ハッシュテーブル)またはO(log n)(平衡バイナリツリー)ルックアップですか?誰もが私を助けるか、右PHP Cソースファイルに私を指すことができた場合は

(たとえば)(少し説明が良いでしょうけれども - 私はCで本当に悪いです)、それは素晴らしいだろう。あるいは、PHPの配列についての洞察を得ているだけなら、基礎となるデータ構造全体を理解しようとしています。

+1

(http://stackoverflow.com/q/8659224/858515)受け入れられたのコメントを読んで '[array_keysは、値の検索を行うどのように?]答え。 – ThinkingMonkey

+1

多分あなたはこの記事http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html –

答えて

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

+0

ハッシュテーブルです。 – MasterCassim

+0

良い発見、編集のおかげで – lollercoaster

関連する問題