Laravel – Collection – グルーピングと集計

概要

LaravelCollectionには、count()sum()などの集計用メソッドが準備されている。groupBy()メソッドも準備されているが、これはグルーピングされたキー列の値で配列をまとめるだけなので、直接groupBy()の結果をcount()などに適用することはできない。

たとえば以下のようなコレクションがあって、

groupBy()によってgenderでグルーピングすると以下のようなコレクションが得られる。

この結果を単にcount()メソッドに渡すと、malefemaleの2つのグループあることから、グループ数に対応する'2'が返される。

これを、male/female各グループの要素数をカウントしたり、グループごとの身長の集計値を出したりするようにしたい。

map()メソッドの利用したグループ処理

map()メソッドはコールバックを引数にとり、そのコールバックの引数には元のコレクションの各要素が順次与えられる。

たとえば先のグルーピングの結果をmap()メソッドに渡すと、2つの要素malefemale(その中身は連想配列の配列)が順次与えられる。これらグループ化された配列に対して、Collectionの集計メソッドを使うことができる。

この場合、グループ化された1つ目のグループの各要素に関する処理、2つ目のグループの各要素に関する処理・・・と実行される。

集計例

count()の例

性別ごとの人数をカウントする例。

average()の例

性別ごとの平均身長を計算する例。

 

 

コメントを残す

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