現在の位置: ホーム> 最新記事一覧> 多次元配列では、UKSORT関数を使用して正確なキーソート処理を実行する方法は?

多次元配列では、UKSORT関数を使用して正確なキーソート処理を実行する方法は?

gitbox 2025-06-23

[多次元配列では、UKSORT関数を使用して正確なキーソート処理を実行する方法は? ]

PHPでは、アレイは非常に強力で柔軟なデータ構造です。多次元配列は、一般的なアプリケーションシナリオの1つであり、複雑なデータを保存するためによく使用されます。ただし、多くの場合、キーでソートする必要性に遭遇します。 PHPは、配列をソートするためのさまざまな機能を提供します。その中には、uksort()とは、キーに従って配列をソートするためによく使用されるソートルールをカスタマイズできる関数です。この記事では、uksort()関数を使用して、多次元アレイで正確なキーソートを実行する方法に焦点を当てます。

1。uksort関数とは何ですか?

uksort()は、ユーザー定義の比較関数を介して配列のキーをソートするPHPの関数です。この関数の基本的な構文は次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$cmp_function</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • 配列:ソートする配列(キーでソート)。

  • CMP_FUNCTION :配列キーを比較するために使用されるコールバック関数。コールバック関数は、整数を返して、2つのキーがソートされる順序を決定する必要があります。

2。多次元配列の構造と並べ替え要件

多次元配列を扱う場合、配列内の要素も通常アレイです。たとえば、学生情報を記録する多次元配列があり、各生徒の情報に名前、年齢、スコアなどが含まれているとします。

 <span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">'student1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">88</span></span><span>],
    </span><span><span class="hljs-string">'student2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>],
    </span><span><span class="hljs-string">'student3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    </span><span><span class="hljs-string">'student4'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">95</span></span><span>]
];
</span></span>

このような多次元配列では、私たちの目標は、特定のキー(学生の名前、年齢、スコアなど)で並べ替えることです。

3。uksortを使用して多次元配列を並べ替えます

多次元配列でキーでソートするには、まずuksort()を介してソートルールをカスタマイズする方法を理解する必要があります。一般的に言えば、各配列の特定のアイテム値で並べ替えます。

各生徒の年齢までに並べ替えたいとします。 uksort()は外側の配列のキーのみを処理し、内部キーを直接操作しないため、比較関数を通じて各生徒の年齢にアクセスして、それに従って並べ替える必要があります。

uksort()関数を使用して生徒が並べ替えの例を示します。

 <span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">'student1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">88</span></span><span>],
    </span><span><span class="hljs-string">'student2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>],
    </span><span><span class="hljs-string">'student3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    </span><span><span class="hljs-string">'student4'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">95</span></span><span>]
];

</span><span><span class="hljs-comment">// カスタム比較関数</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_age</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>];
}

</span><span><span class="hljs-comment">// 使用uksort学生の年齢別に配列を並べ替えます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_age'</span></span><span>);

</span><span><span class="hljs-comment">// 出力ソートされた結果</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>

説明する:

  1. カスタム比較関数Compare_age :2つのパラメーター(それぞれ2つの配列のキー)を受け入れます。これらの2つのキーを使用すると、 $学生のアレイから生徒の年齢にアクセスして比較し、整数を返してソート順序を決定します。

  2. uksort() call: uksort()への引数として比較_age関数を渡します。これは、年齢ごとに学生配列のキーをソートします。

4.他のキーによるソート

学生のスコアに基づいてソートする必要があるとします。この方法は年齢の並べ替えに似ており、比較関数のアクセス値を変更するだけです。

 <span><span><span class="hljs-comment">// カスタム比較関数(スコアでソートします)</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_score</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'score'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'score'</span></span><span>];
}

</span><span><span class="hljs-comment">// 使用uksort分数別に配列をソートします</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_score'</span></span><span>);

</span><span><span class="hljs-comment">// 出力ソートされた結果</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>

5。複雑なソートシナリオ

いくつかの複雑なソートシナリオでは、たとえば年齢ごとに最初に並べ替え、年齢が同じ場合、スコアで複数の基準を並べ替える必要がある場合があります。比較関数で複数のフィールドを同時に比較することで、これを達成できます。

 <span><span><span class="hljs-comment">// カスタム比較関数(年齢とスコアごとに並べ替えます)</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_age_and_score</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
    </span><span><span class="hljs-comment">// 年齢の比較</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] == </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>]) {
        </span><span><span class="hljs-comment">// 年齢が同じ場合,スコアでソートします</span></span><span>
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'score'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'score'</span></span><span>];
    }
    </span><span><span class="hljs-comment">// それ以外の場合は、年齢別に並べ替えます</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>];
}

</span><span><span class="hljs-comment">// 使用uksort複雑なソート</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_age_and_score'</span></span><span>);

</span><span><span class="hljs-comment">// 出力ソートされた結果</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>

6。概要

uksort()は、カスタムルールに従って配列のキーをソートするのに役立つ強力なツールです。多次元配列の場合、通常、外側の配列のキーを介して内部要素の値にアクセスし、これらの値に従ってソートする必要があります。単一の条件付きソートであろうと複雑なマルチコンディショナルソートであろうと、 uksort()は柔軟なサポートを提供します。

この記事の説明が、uksort()を使用して多次元配列でキーを並べ替える方法を理解し、ニーズに応じて柔軟な調整と使用を行う方法を理解できることを願っています。