Laravel CollectionのgroupByで効率的なデータのグループ化

LaravelのCollectionは、配列やデータベースのクエリ結果などの要素を操作するための便利なメソッドを提供しています。

その中でも、groupByメソッドは特定のキーに基づいてコレクションをグループ化するためのメソッドです。

groupByメソッドを使用すると、コレクション内の要素を指定したキーでグループ化できます。

グループ化された結果は、各グループのキーと、そのキーに対応する要素のコレクションとして返されます。

具体的な使い方

$collection = collect([
    ['name' => 'John', 'age' => 25],
    ['name' => 'Jane', 'age' => 30],
    ['name' => 'John', 'age' => 35],
]);

$grouped = $collection->groupBy('name');

/*
    [
        'John' => [
            ['name' => 'John', 'age' => 25],
            ['name' => 'John', 'age' => 35],
        ],
        'Jane' => [
            ['name' => 'Jane', 'age' => 30],
        ],
    ]
*/

上記の例では、$collectionというコレクションを定義し、その要素は名前と年齢を持つ連想配列です。

groupByメソッドを使って、要素をnameキーでグループ化しています。

結果のコレクションは、キーとして名前が使用され、各キーに対応する要素がグループ化されたコレクションとして格納されています。

この例では、Johnキーの要素は2つありますが、Janeキーの要素は1つしかありません。

groupByメソッドは、キーを指定するだけでなく、クロージャ(無名関数)も使用できます。以下はクロージャを使用した例です。

$collection = collect([
    ['name' => 'John', 'age' => 25],
    ['name' => 'Jane', 'age' => 30],
    ['name' => 'John', 'age' => 35],
]);

$grouped = $collection->groupBy(function ($item) {
    return $item['age'] => 30 ? 'over_30' : 'under_30';
});

/*
    [
        'over_30' => [
            ['name' => 'Jane', 'age' => 30],
            ['name' => 'John', 'age' => 35],
        ],
        'under_30' => [
            ['name' => 'John', 'age' => 25],
        ],
    ]
*/

上記の例では、要素のageが30から大きいかどうかに基づいてグループ化を行っています。

30より大きい場合はover_30というキーに、30以下の場合はunder_30というキーにグループ化されます。

groupByメソッドは、コレクション内の要素を効率的にグループ化するための便利なメソッドです。データの集計やグループごとの処理を行う際に役立ちます。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA