PHP で多次元配列を並べ替える

Subodh Poudel 2023年1月30日
  1. PHP で宇宙船演算子を使用して多次元配列を並べ替える
  2. PHP で匿名比較関数で usort() 関数を使用して多次元配列を並べ替える
  3. PHP で usort() 関数とユーザー定義の比較関数を使用して多次元配列を並べ替える
PHP で多次元配列を並べ替える

この記事では、PHP で多次元配列を値でソートする 3つの方法を紹介します。

PHP で宇宙船演算子を使用して多次元配列を並べ替える

宇宙船演算子 <=> を使用して、PHP の値で多次元配列を並べ替えることができます。宇宙船オペレーターと一緒に usort() 関数を使用します。この演算子は PHP7 で導入されました。これは、2つの値を比較するために使用されます。両方のオペランドが等しい場合は整数値 0 になり、左のオペランドが右のオペランドよりも小さい場合は 0 未満になり、左のオペランドが右よりも大きい場合は 0 より大きくなります。オペランド。同様に、usort() 関数は、ユーザー定義の比較関数を考慮して、値を使用して配列を並べ替えます。関数の構文は次のとおりです。

usort($array, $callback)

ここで、$array はソートされる配列です。オプション $callback は、配列の最初と 2 番目の引数を比較する匿名のコールバック関数です。

たとえば、次の配列を並べ替えるとします。age キーの値で配列を並べ替えます。

$info = array(
    array('name' => 'Jadon', 'age' => 21, 'country' => 'England'),
    array('name' => 'Marcus', 'age' => 23, 'country' => 'England'),
    array('name' => 'Anthony', 'age' => 24, 'country' => 'France'),
    array('name' => 'Mason', 'age' => 19, 'country' => 'England'),
    array('name' => 'Dan', 'age' => 23, 'country' => 'Wales'),
);

PHP の開始タグ内に、$info 配列と無名関数を 2つの引数として使用して、usort() 関数を記述します。無名関数には、パラメーターとして $x$y があります。関数の本体内で、スペースシップ演算子を使用して、2つの引数の年齢を $x['age'] <=> $y['age'] として比較し、値を返します。次に、PHP の開始タグを閉じます。次に、PHP の print_r() 関数を使用して、HTML の <pre> タグの中に $info の配列を表示します。

したがって、配列は、出力セクションに示されているように、値 age に従ってソートされます。

サンプルコード:

<?php
usort($info, function($x, $y) {
    return $x['age'] <=> $y['age'];
});
?>

<pre><?php print_r($info);?> </pre>

出力:

Array
(
 [0] => Array
 (
 [name] => Mason
 [age] => 19
 [country] => England
 )

 [1] => Array
 (
 [name] => Jadon
 [age] => 21
 [country] => England
 )

 [2] => Array
 (
 [name] => Marcus
 [age] => 23
 [country] => England
 )

 [3] => Array
 (
 [name] => Dan
 [age] => 23
 [country] => Wales
 )

 [4] => Array
 (
 [name] => Anthony
 [age] => 24
 [country] => France
 )
)

PHP で匿名比較関数で usort() 関数を使用して多次元配列を並べ替える

最初のメソッドで使用された usort() 関数を使用して、匿名のコールバック関数とともに値を使用して多次元配列を並べ替えることができます。この方法では、宇宙船 <=> 演算子の代わりに減算演算子を使用します。配列の並べ替えに応じて、配列の値を減算できます。したがって、配列を並べ替えることができます。同じ配列 $info を使用して、値 $age で並べ替えます。宇宙船オペレーターは PHP7 でのみ導入されたため、このメソッドは PHP7 より前に使用できます。

たとえば、上記のパラメータを使用して usort() 関数を記述します。無名関数の本体で、2つの引数の減算を $x['age'] - $y['age'] として返します。上記のように、print_r() を使用して配列を出力します。最初の方法と同じ出力を受け取ります。

サンプルコード:

<?php
usort($info, function($x, $y) {
    return $x['age'] - $y['age'];
});
?>
<pre><?php print_r($info);?> </pre>

PHP で usort() 関数とユーザー定義の比較関数を使用して多次元配列を並べ替える

この方法は、2 番目の方法と非常によく似ています。唯一の違いは、無名関数の代わりにユーザー定義の比較関数を使用することです。このメソッドは、PHP5.3 バージョンより前に使用できます。これは、匿名関数の概念が PHP5.3 で導入されたためです。

たとえば、パラメータとして $x$y を使用して、ユーザー定義関数 sortByAge() を作成します。関数本体の中に、上記のように年齢の減算を書きました。関数の外で、引数として $info 配列と sortByAge を使用して usort() 関数を記述します。最後に、配列を出力します。

以下の例は、最初の方法と同じ出力を表示します。

サンプルコード:

<?php
function sortByAge($x, $y) {
    return $x['age'] - $y['age'];
}
usort($info, 'sortByAge');
?>
<pre><?php print_r($info);?> </pre>
著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

関連記事 - PHP Array