[PHP]連想配列の内容を特定のキー値でGroupByしたい

カテゴリ: PHP

PHPでハッシュの配列(DBの検索結果など)を、特定のキーでグループかする方法です。

Laravelの場合

Laravelの場合はcollectオブジェクトにgroupBy()メソッドがあるため、これを利用できます。

$collection = collect([
   ['account_id' => 'account-x10', 'product' => 'Chair'],
   ['account_id' => 'account-x10', 'product' => 'Bookcase'],
   ['account_id' => 'account-x11', 'product' => 'Desk'],
]);

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

$grouped->toArray();

/*
   [
       'account-x10' => [
           ['account_id' => 'account-x10', 'product' => 'Chair'],
           ['account_id' => 'account-x10', 'product' => 'Bookcase'],
       ],
       'account-x11' => [
           ['account_id' => 'account-x11', 'product' => 'Desk'],
       ],
   ]
*/ 

Laravelなどのフレームワークがない場合

素のPHPで関数を作る場合は、以下のコードで配列のグルーピングができます。

function groupBy($key, array $ary): array
{
   $result = []

   foreach ($ary as $row) {
       if (array_key_exists($key, $row)) {
           $result[$row[$key]][] = $row;
       } else {
           $result[""][] = $val;
       }
   }

   return $result;
}
こちらもおススメ
カテゴリ: PHP

コメントを残す

メールアドレスが公開されることはありません。