LaravelでEloquentからデータを呼び出した場合など、入れ子になっているデータを生成した際、基本的に”Collection”クラスのオブジェクトとして生成されるようになっています。
Collectionオブジェクトは、配列本体と、配列を扱うのに便利なメソッドが含まれており、データを生成した後で様々な処理を配列に対して行うことができるようになっています。
今回ご紹介するSortBy()メソッドもその便利な機能の一つです。
もしデータベースからデータを取得するのであれば、基本的にORDER BY句を使用してデータをソートすることができます。
しかし、場合によってはデータベースから一度データを取得した上で後からソートしたい場合や、データベース以外のソースからデータを取得した場合など、配列の状態になっているデータをソートしたくなる時があります。
SortBy()を使うと、配列内のデータを基準にして、データを並べ替えることができます。
$collection = collect([
['id' => 1, 'name' => '山田', 'age' => 18],
['id' => 2, 'name' => '佐藤', 'age' => 38],
['id' => 3, 'name' => '小林', 'age' => 25],
]);
$sorted = $collection->sortBy('age');
print_r($sorted->toArray());
<結果>
Array
(
[0] => Array
(
[id] => 1
[name] => 山田
[age] => 18
)
[2] => Array
(
[id] => 3
[name] => 小林
[age] => 25
)
[1] => Array
(
[id] => 2
[name] => 佐藤
[age] => 38
)
)
※https://qiita.com/yukachin0414/items/6c18805c7451620bc59d から引用
データの塊は維持されたまま、キーの順番だけ変わってます。
素のPHPだと少し扱いが面倒だったりするので、この機能は非常に使えます。
僕も、データベース内だけではソートできない場面に当たったことがあり、この機能にかなり助けられました。
Laravelで開発を行う際は、是非参考にしてみてください。