単純な昇順・降順ではなく、実装上の都合で特定の要素をソート基準として並べ替えたくなることが度々ある。
そんな時、PHPでは関数として並べ替えのルールを定義してソートする関数「usort」が用意されている。
<?php function mysort($a, $b) { return $a["order"] < $b["order"] ? -1 : 1; } $arr[] = ["order" => 3]; $arr[] = ["order" => 1]; $arr[] = ["order" => 2]; echo "ソート前: "; foreach ($arr as $a) { echo $a["order"]; } echo "\n"; echo "ソート後: "; usort($arr, "mysort"); foreach ($arr as $a) { echo $a["order"]; }
これを実行するとこうなる。
$ php usort.php ソート前: 312 ソート後: 123
まず、ソート条件を関数として定義する。(上記ではmysortという関数。)
この関数には戻り値が必要で、戻り値の正負によって並べ替えが行われる。
戻り値が負なら要素同士を入れ替え、正ならそのままになる。
次に、ソート対象になるオブジェクトとソート条件関数を「usort」に引数として渡す。
これで対象のオブジェクトが先程の関数に記述された条件で並び替えられる。
例の中では、配列中の各要素のorderに格納されている値の大小を元にしてソートされる。
実際に実行してみると、ソート前後で要素が並び替えられていることがわかる。