独自ルールでソート実装! PHPのusortの使い方

こんにちは! 池島です。
 
最近PHPで独自ルールを設定できるソートメソッドである「usort」を利用する機会がありました。その利用方法をご紹介します。

検証環境

今回検証を行ったPHPのバージョンは以下の通りです。

PHP
8.1.17

usortとは

usort — ユーザー定義の比較関数を使用して、配列を値でソートする

PHP マニュアルより

PHPには配列を昇順にソートするsortメソッドや、降順にソートするrsortメソッドがありますが、これらは複雑なソートはできません。usortはどのようにソートするのか自由に設定し、複雑な配列のソートを行うことができます。

usortの使い方

usortは以下の構成になっています。

usort(array &$array, callable $callback)

$arrayには並び替えをしたい配列を指定し、$callbackには独自ソートを定義したfunction名を指定します。

実装例

例として、以下の条件を満たすソートを考えます。
・データを年齢の昇順にソートする
・年齢が同じ場合は、身長の昇順とする
 
実装は下記の通りになります。

<?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は例外や複雑な条件に強いので、是非活用してみてください。
 
ではまた!
 
 
 
 
《関連記事》

Laravelの開発環境の構築
技術
2019.11.21(Thu)

Laravelの開発環境の構築! パッケージ管理ツールComposerのインストール方法

#PHP

PHPの変数の使い方2
技術
2016.7.8(Fri)

【PHPをふわっと語りたい人のための入門講座】 PHPの変数の使い方2

#PHP

PHPの変数の使い方1
技術
2016.5.20(Fri)

【PHPをふわっと語りたい人のための入門講座】 PHPの変数の使い方1

#プログラム#PHP

記事をシェア
MOST VIEWED ARTICLES