PHP では配列が強力すぎるため、これらのデータ構造が組み込まれているため、これらのデータ構造に注意を払う必要はなく、これらの概念は時間の経過とともに薄れていきます。 PHP には Data Structures と呼ばれる拡張機能があり、これにはこれらの一般的なデータ構造が含まれています。今日はそれを紹介しましょう。
PHP では、配列が強力すぎるため、これらのデータ構造が組み込まれているため、これらのデータ構造に注意を払う必要はなく、これらの概念は時間の経過とともに薄れていきます。 . は、PHP にデータ構造が存在しないことを意味するものではありません。
PHP には拡張データ構造があり、これらの一般的なデータ構造が含まれています。
Priority QueuePriorityQueue
両端の QueueDeque
キュー FIFO (先入れ先出し)
スタック LIFO (先入れ後出し)
ハッシュ テーブル ハッシュ
PriorityQueue は Queue とよく似ています。値は指定された優先順位でキューにプッシュされ、最も高い優先順位を持つ値が常にキューの先頭になります。
注
同じ優先度の値については、「先入れ先出し」の順序が維持されます。
PriorityQueue の反復は破壊的であり、キューが空になるまで継続的にポップ操作を行うことと同等です。
デフォルトの容量は 8 です。容量は手動で設定できます。この容量はキューの長さではなく、ストレージ容量を指します。 。容量を再割り当てするときは、十分なメモリがあることを確認してください。
値が現在の容量以下の場合、容量は変更されません。
$queue = new Ds\PriorityQueue(); $queue->allocate(8);
現在手動で容量を設定している場合、設定容量が実際の占有容量より大きい場合は、設定容量を返します。それ以外の場合は、実際の容量が返されます。
$queue = new Ds\PriorityQueue(); // 此时返回默认值 8 $queue->capacity();
値が大きいほど優先度が高くなります
$queue = new Ds\PriorityQueue(); $queue->push('value1', 1); $queue->push('value2', 2);
$queue = new Ds\PriorityQueue(); $queue->push('沙僧', 2); $queue->push('唐僧', 5); $queue->push('白龙马', 1); $queue->push('猪八戒', 3); $queue->push('孙悟空', 4); $cout = $queue->count(); for($i=0; $i<$cout; $i++) { echo $queue->pop(); echo PHP_EOL; }
唐僧 孙悟空 猪八戒 沙僧 白龙马
MySQL クエリを高速化し、インデックスを使用しないソートを回避するために、ソートは実行されず、戻る前にサーバー コード レベルで手動ソートが実行されました。
その他のアプリケーション シナリオ...
には先頭と末尾を指す 2 つのポインターがありますそれぞれ 。挿入と排出は頭部と尾部でそれぞれ行うことができます。
配列構文 (角括弧) をサポートします。
同じ数の値に対して配列よりもメモリの使用量が少なくなります。
割り当てられたメモリのサイズが十分に小さくなったら、自動的にメモリを解放します。
get()、set()、push()、pop()、shift()、および unshift() はすべて O(1) です。
設定される容量値は 2 の累乗である必要があり、デフォルト値は 8 です。たとえば、2^2
insert() と Remove() は O(n) です。
$deque = new Ds\Deque(); $deque->push(...['唐僧', '孙悟空', '猪八戒', '沙僧', '白龙马']); $clone = $deque->copy(); $count = $deque->count(); echo '头:'.$deque->first().PHP_EOL; echo '尾:'.$deque->last().PHP_EOL; echo '--- 从队尾开始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) { echo $deque->pop(); echo PHP_EOL; } echo '--- 从队头开始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) { echo $clone->shift(); echo PHP_EOL; }
头:唐僧 尾:白龙马 --- 从队尾开始 ---- 白龙马 沙僧 猪八戒 孙悟空 唐僧 --- 从队头开始 ---- 唐僧 孙悟空 猪八戒 沙僧 白龙马
$queue = new Ds\Queue(); $queue->push('唐僧'); $queue->push(...['孙悟空', '猪八戒']); $queue->push(['沙僧', '白龙马']); print_r($queue);
Ds\Queue Object ( [0] => 唐僧 [1] => 孙悟空 [2] => 猪八戒 [3] => Array ( [0] => 沙僧 [1] => 白龙马 ) )
$Stack = new Ds\Stack(); $Stack->push('唐僧'); $Stack->push(...['孙悟空', '猪八戒']); $Stack->push(...['沙僧', '白龙马']); $cout = $Stack->count(); for($i=0; $i<$cout; $i++) { echo $Stack->pop(); echo PHP_EOL; }
白龙马 沙僧 猪八戒 孙悟空 唐僧
利点
#Map と Set の違い
Map と Set は両方とも順序性を確保するためにキーを使用します。キーは許可されていません。
推奨学習: php ビデオ チュートリアル
以上がPHP のデータ構造拡張機能の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。