Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】SplPriorityQueue::compare()メソッドの使い方

compareメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

compareメソッドは、SplPriorityQueueにおいて、要素の優先度を比較し、その順序を決定するために使用されるメソッドです。SplPriorityQueueは、追加された要素を優先度に基づいて自動的に並べ替え、最も優先度の高い要素から取り出せるようにする特別なデータ構造です。このcompareメソッドは、新しい要素がキューに追加される際や、キュー内部で要素の順序を調整する必要がある場合に、どの要素がより高い優先度を持つかを判断するために、キューの内部で自動的に呼び出されます。

具体的には、このメソッドは2つの優先度、例えば$priority1$priority2を引数として受け取ります。そして、これらの優先度を比較した結果を整数値で返します。$priority1$priority2よりも高い優先度を持つと判断される場合は正の数を、低い優先度を持つ場合は負の数を、そして両者の優先度が同じ場合はゼロを返します。

SplPriorityQueueのデフォルトの実装では、数値が大きいほど優先度が高いと判断されるようにcompareメソッドが動作します。もし、このデフォルトの挙動を変更したい場合、例えば「数値が小さいほど優先度が高い」といった独自の優先度ルールを適用したい場合は、SplPriorityQueueクラスを継承し、このcompareメソッドをオーバーライドすることで、独自の比較ロジックを定義できます。これにより、アプリケーションの特定の要件に合わせた柔軟な優先度管理を実現できます。

構文(syntax)

1<?php
2
3class MyCustomPriorityQueue extends SplPriorityQueue
4{
5    /**
6     * 2つの優先順位を比較します。
7     *
8     * @param mixed $priority1 比較する最初の優先順位。
9     * @param mixed $priority2 比較する2番目の優先順位。
10     * @return int $priority1 が $priority2 より優先度が低い場合は負の整数、等しい場合は0、高い場合は正の整数を返します。
11     */
12    protected function compare(mixed $priority1, mixed $priority2): int
13    {
14        // ここにカスタムの比較ロジックを記述します。
15        // 例: 値が大きいほど優先度が高い
16        if ($priority1 === $priority2) {
17            return 0;
18        }
19        return ($priority1 > $priority2) ? 1 : -1;
20    }
21}

引数(parameters)

mixed $priority1, mixed $priority2

  • mixed $priority1: 比較対象となる1つ目の優先度
  • mixed $priority2: 比較対象となる2つ目の優先度

戻り値(return)

int

SplPriorityQueue::compare()メソッドは、2つの要素の優先度を比較した結果を整数で返します。返り値は、最初の要素が2番目の要素よりも優先度が高い場合は正の値、低い場合は負の値、等しい場合は0となります。

関連コンテンツ

【PHP8.x】SplPriorityQueue::compare()メソッドの使い方 | いっしー@Webエンジニア