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;
}
こちらもおススメ