2013-07-20 16 views
7

PHPのarrayが、関連する配列機能を必要としないときに使用する軽量の代替品はありますか?私が知っているところでは、arrayは内部的にハッシュマップであり、要素の単純な配列を格納するには過度で非効率的です。 PHPがC++のstd::vectorに似たクラスまたはプログラミング構造を持っていれば、それは素晴らしいものです。PHPにC++のstd :: vectorと同等のものがありますか?

参考:http://www.cplusplus.com/reference/vector/vector/

+5

でソースコードを閲覧することができます:** [PHP配列がされている]いくつかの異なる向けに最適化使用;配列、リスト(ベクトル)、ハッシュテーブル(マップの実装)、辞書、コレクション、スタック、キューなどとして扱うことができます。**具体的には、配列が原因で何をしようとしていますか?あなたは困った? –

+0

特に、PHPの「配列」は、ハッシュテーブルと二重リンクリストとして同時に実装されています。これは、挿入と削除の操作がさまざまなポインタを維持するために少し余分なオーバーヘッドを抱えていることを意味しますが、すべての種類の取得は非常に高度に最適化されています。 – IMSoP

+0

@IMSoP PHPのネイティブ配列だけでなく、時間的にもメモリの面でも効率的ではありませんか? –

答えて

9

は、SPLデータ構造を見てください。例は通常の配列よりも速いhttp://www.php.net/manual/en/class.splfixedarray.phpです。

http://www.php.net/manual/en/spl.datastructures.php

+4

SPLFixedArrayは、ランダムアクセスのための標準的なPHP配列より高速です。シーケンシャルアクセスの場合は分けて遅くなります(foreach()など)。メモリを大幅に節約できます。逆に、SPLDoublyLinkedListsは標準的なPHP配列よりもシーケンシャルアクセスのほうが高速です.SPLデータ構造が推奨されていることを確認するのが良いです –

+0

+1良い情報 – DevZer0

+2

SplFixedArrayは固定です。 ['std :: vector'](http://www.cplusplus.com/reference/vector/vector/)はそうではありません。 – Gordon

3

いいえ、PHPはstd::vectorに厳密に等価ではありません。

私達はちょうど私たちのmulti-purpose arraysまたはadditional datastructures in SPLの1、すなわちSplFixedArrayArrayObjectといくつかのHeapsStacksを使用していますが、それらのどれも実際には等価ではありません。

私はメモリを節約するための考えることができる最も近いものはPECL extension for Judy Arraysです:

PHPジュディはまばらな動的な配列(別名ジュディ・アレイ)を実装しています。この拡張はJudy Cライブラリに基づいています。 Judy配列は、データが移入されたときにのみメモリを消費しますが、必要に応じて使用可能なすべてのメモリを利用できるようになります。 Judyの主なメリットは、スケーラビリティ、高性能、メモリ効率です。

それは次のモードをサポートしています。

  • BITSET - ブール
  • INT_TO_INTとしてIntegerなどのキーと値を持つビットセットとしてジュディの配列を定義する - などのキー/値でジュディの配列を定義整数、および整数のみです。
  • INT_TO_MIXED - Integerと任意のタイプの値としてキーを使用してJudy Arrayを定義します。
  • STRING_TO_INT - キーを文字列として、値を整数として、整数のみでJudy Arrayを定義します。
  • STRING_TO_MIXED - キーを文字列として使用し、任意の型の値を持つJudy配列を定義します。

おそらくINT_TO_MIXEDが必要です。私が言ったように、それは私が考えることができる最も近いものです。それは同じではありません。これまで私はそれを使ったことがないので、効率性の面で要件を満たしているかどうかはわかりません。

あなたは[ドキュメント](http://php.net/manual/language.types.array.php)からhttp://lxr.php.net/xref/PECL/Judy/