ホームページ  >  記事  >  バックエンド開発  >  PHP のデータ構造拡張機能の詳細な紹介

PHP のデータ構造拡張機能の詳細な紹介

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-07-27 16:54:171810ブラウズ

PHP では配列が強力すぎるため、これらのデータ構造が組み込まれているため、これらのデータ構造に注意を払う必要はなく、これらの概念は時間の経過とともに薄れていきます。 PHP には Data Structures と呼ばれる拡張機能があり、これにはこれらの一般的なデータ構造が含まれています。今日はそれを紹介しましょう。

PHP のデータ構造拡張機能の詳細な紹介

PHP では、配列が強力すぎるため、これらのデータ構造が組み込まれているため、これらのデータ構造に注意を払う必要はなく、これらの概念は時間の経過とともに薄れていきます。 . は、PHP にデータ構造が存在しないことを意味するものではありません。

PHP には拡張データ構造があり、これらの一般的なデータ構造が含まれています。

PHP データ構造

  • Priority QueuePriorityQueue

  • 両端の QueueDeque

  • キュー FIFO (先入れ先出し)

  • スタック LIFO (先入れ後出し)

  • ハッシュ テーブル ハッシュ

  • Set Collection
  • Map Dictionary

データ構造の概要

Priority QueuePriorityQueue

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 クエリを高速化し、インデックスを使用しないソートを回避するために、ソートは実行されず、戻る前にサーバー コード レベルで手動ソートが実行されました。

  • その他のアプリケーション シナリオ...

両端キュー Deque

には先頭と末尾を指す 2 つのポインターがありますそれぞれ 。挿入と排出は頭部と尾部でそれぞれ行うことができます。

利点

  • 配列構文 (角括弧) をサポートします。

  • 同じ数の値に対して配列よりもメモリの使用量が少なくなります。

  • 割り当てられたメモリのサイズが十分に小さくなったら、自動的にメモリを解放します。

  • get()、set()、push()、pop()、shift()、および unshift() はすべて O(1) です。

欠点

  • 設定される容量値は 2 の累乗である必要があり、デフォルト値は 8 です。たとえば、2^2

  • insert() と Remove() は O(n) です。

#クラスメソッドの説明

両端キューDeque

$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;
}

出力

头:唐僧
尾:白龙马
--- 从队尾开始 ----
白龙马
沙僧
猪八戒
孙悟空
唐僧
--- 从队头开始 ----
唐僧
孙悟空
猪八戒
沙僧
白龙马

アプリケーションシナリオ

    複数のアプリケーション シナリオ
キュー FIFO (先入れ先出し)

キューは「先入れ先出し」または「FIFO」です。コレクション。キューの先頭にある値へのアクセスのみが許可されます。

$queue = new Ds\Queue(); 
$queue->push('唐僧');
$queue->push(...['孙悟空', '猪八戒']);
$queue->push(['沙僧', '白龙马']);
print_r($queue);

出力

Ds\Queue Object
(
    [0] => 唐僧
    [1] => 孙悟空
    [2] => 猪八戒
    [3] => Array
        (
            [0] => 沙僧
            [1] => 白龙马
        )
)

スタックLIFO (先入れ後出し)

スタックは「後入れ先出し」または「LIFO」です。構造体の先頭の値のみにアクセスが許可されるコレクション。

$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;
}

出力

白龙马
沙僧
猪八戒
孙悟空
唐僧

マップ ディクショナリ

マップは、次のようなキーと値のペア [key=>value] の連続したコレクションです。配列。キーは任意のタイプにすることができますが、一意である必要があります。同じキーを使用して値がマップに追加された場合、後の追加によって前の値が置き換えられます。

利点

  • キーと値はオブジェクトを含む任意の型にできます

  • 配列構文をサポートします。

  • #広告掲載オーダーを保持します。
  • パフォーマンスとメモリ効率はデータと似ています。
  • サイズが十分に小さくなったら、割り当てられたメモリを自動的に解放します。
  • 欠点

オブジェクトをキーとして使用する場合、配列に変換できません。
  • Set Set

Set は一連の一意の値です。値を格納しないキーのセットは 1 つだけあり、キーを繰り返すことはできません。

利点

    値は、オブジェクトを含む任意の型にすることができます。
  • 配列構文をサポートします。
  • #広告掲載オーダーを保持します。
  • サイズが十分に小さくなったら、割り当てられたメモリを自動的に解放します。
  • add()、remove()、contains() の複雑さは O(1) です。
  • 欠点

push()、pop()、insert()、shift()、unshift()をサポートしていません
  • アクセスされるインデックスの前にバッファーに削除された値がある場合、get() は O(n) になり、それ以外の場合は O(1) になります。
  • #Map と Set の違い

格納方法が異なります。 Map は形式 [key => value] を格納し、Set は形式 [...keys] を格納します;

  • Map と Set は両方とも順序性を確保するためにキーを使用します。キーは許可されていません。

推奨学習: php ビデオ チュートリアル

以上がPHP のデータ構造拡張機能の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。