在 Laravel 中,使用 Collection 的 groupBy
方法可以很容易地做到这一点。
假设有一个名为 items
的集合,其中每个项目都有一个 user_id
属性。
$items = collect([
['id' => 1, 'user_id' => 1, 'name' => 'Item 1'],
['id' => 2, 'user_id' => 2, 'name' => 'Item 2'],
['id' => 3, 'user_id' => 1, 'name' => 'Item 3'],
['id' => 4, 'user_id' => 3, 'name' => 'Item 4'],
]);
要按 user_id
分组,可以像这样使用 groupBy
方法:
$grouped = $items->groupBy('user_id');
// 返回的 $grouped 集合看起来像这样:
// [
// 1 => [
// ['id' => 1, 'user_id' => 1, 'name' => 'Item 1'],
// ['id' => 3, 'user_id' => 1, 'name' => 'Item 3'],
// ],
// 2 => [
// ['id' => 2, 'user_id' => 2, 'name' => 'Item 2'],
// ],
// 3 => [
// ['id' => 4, 'user_id' => 3, 'name' => 'Item 4'],
// ],
// ]
这将产生一个新的集合,其中每个项目都是具有相同 user_id
的原始项目的子集。在这个例子中,我们有三个键-值对,分别对应于用户 ID 1、2 和 3。
您也可以使用回调函数自定义键,以获得更灵活的结果。例如,要使用文件名来分组一个包含许多文件的集合,您可以这样做:
$files = collect([
['