PHPのusort関数で多次元配列をサブ値(キー)ごとに並べ替える方法
PHPでは、「usort」関数を使用することで、多次元配列を柔軟に並べ替えることができます。この関数は、ユーザーが定義した比較基準(コールバック関数)に基づいて配列をソートするため、標準のsort関数では対応できない複雑な条件での並べ替えにも対応可能です。
基本的な使用例
<?php
function my_sort($a,$b) {
if ($a==$b) return 0;
return ($a<$b)?-1:1;
}
$a=array(4,2,81,63);
usort($a,"my_sort");
$arrlength=count($a);
for($x=0;$x<$arrlength;$x++) {
echo $a[$x];
echo "<br>";
}
?>
出力結果
上記のコードを実行すると、次のような出力が得られます。
2 4 63 81
この例では、4つの要素を持つ配列を宣言し、それをusort関数に渡しています。第2引数として指定したユーザー定義関数「my_sort」が各要素の比較を行い、昇順に並べ替えられる仕組みです。比較関数は、2つの値が等しい場合に0、最初の値が小さい場合に-1、大きい場合に1を返すように実装します。
多次元配列をサブ値(キー)で並べ替える
usort関数の真価が発揮されるのは、連想配列を含む多次元配列を、特定のサブキーの値でソートしたい場合です。以下は、学生のテストデータをスコアの昇順に並べ替える例です。
<?php
$students = array(
array("name" => "Tanaka", "score" => 85),
array("name" => "Sato", "score" => 92),
array("name" => "Suzuki", "score" => 78)
);
usort($students, function($a, $b) {
return $a["score"] <=> $b["score"];
});
foreach ($students as $student) {
echo $student["name"] . ": " . $student["score"] . "<br>";
}
?>
出力結果
Suzuki: 78 Tanaka: 85 Sato: 92
PHP 7以降では、宇宙船演算子(<=>)を活用することで、比較処理をより簡潔に記述できます。降順にソートしたい場合は、比較の左右を入れ替えるだけで簡単に実現できるため、状況に応じて使い分けるとよいでしょう。
-
PHPのarray_udiff()関数とは?使い方とサンプルコードを徹底解説
PHPのarray_udiff()関数は、ユーザーが定義したコールバック関数を使用して複数の配列の値を比較するための関数です。最初の配列に含まれている値のうち、他のどの配列にも存在しない値だけを集めた新しい配列を返します。通常のarray_diff()関数との違いは、値の比較方法を自分でカスタマイズできる点にあります。大文字小文字を区別しない比較や、オブジェクト同士の独自の比較など、柔軟な処理が必要な場面で活用できます。基本構文array_udiff(arr1, arr2, arr3, …, compare_func)パラメータarr1 − 比較の基準となる最初の配列です。arr
-
PHPのarray()関数とは?配列の作成方法をわかりやすく解説
PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に