お知らせ
2023.12.5(Tue)
目次
こんにちは! 池島です。
最近PHPで独自ルールを設定できるソートメソッドである「usort」を利用する機会がありました。その利用方法をご紹介します。
今回検証を行ったPHPのバージョンは以下の通りです。
usort — ユーザー定義の比較関数を使用して、配列を値でソートする
PHPには配列を昇順にソートするsortメソッドや、降順にソートするrsortメソッドがありますが、これらは複雑なソートはできません。usortはどのようにソートするのか自由に設定し、複雑な配列のソートを行うことができます。
usortは以下の構成になっています。
usort(array &$array, callable $callback)
例として、以下の条件を満たすソートを考えます。
・データを年齢の昇順にソートする
・年齢が同じ場合は、身長の昇順とする
実装は下記の通りになります。
<?php
// 独自ソートfunctionの定義
function sortFunction($a, $b) {
// 年齢が同じ場合、身長で並び替え
if ($a["age"] == $b["age"]) {
return ($a["height"] < $b["height"]) ? -1 : 1;
}
// 年齢で並び替え
return ($a["age"] < $b["age"]) ? -1 : 1;
}
// 並び替え対象の配列
$items = array(
array("name" => "Tanaka", "height" => 175,"age" => 35),
array("name" => "Yamada", "height" => 172,"age" => 22),
array("name" => "Suzuki", "height" => 168,"age" => 48),
array("name" => "Satou", "height" => 170,"age" => 22)
);
// usortの実行
usort($items, "sortFunction");
// 出力
foreach ($items as $item) {
echo $item["name"] . " age:" . $item["age"] . " height:" . $item["height"] . "\n";
}
?>
Satou age:22 height:170 Yamada age:22 height:172 Tanaka age:35 height:175 Suzuki age:48 height:168
いかがでしたでしょうか。
不要なループを多用せず、ソートメソッドを使えるとスマートですね。usortは例外や複雑な条件に強いので、是非活用してみてください。
ではまた!
《関連記事》