我有一个来自 MongoDB 查询的集合:
$collection = DB::connection('test')
->collection('test')->get();
收藏范例:
{ a: b, c: d, created_at: "2021-01-01 10:10:10" }
{ a: b, c: d, created_at: "2021-01-01 11:10:10" }
是否可以按小时对集合行进行分组? 10..11..12 等
希望有效果
$array = [
['a' => 'b', 'c' => 'd', 'created_at' => '2021-01-01 10:10:10'],
['a' => 'b', 'c' => 'd', 'created_at' => '2021-01-01 11:10:10'],
];
$collect = collect($array);
$collect = $collect->groupBy(function($collect){
return date('H',strtotime($collect['created_at']));
});
dd($collect);
我相信 Laravel 的
groupBy()
使用 Carbon 的 `parse() 方法是最直接的方法。
代码:(PHPize演示)
use Carbon\Carbon;
$coll = collect([
['a' => 1, 'b' => 2, 'created_at' => '2021-01-01 10:10:10'],
['a' => 3, 'c' => 4, 'created_at' => '2021-01-01 11:10:10'],
['a' => 5, 'b' => 6, 'created_at' => '2021-01-01 10:53:22'],
['a' => 7, 'c' => 8, 'created_at' => '2021-01-01 12:39:41'],
]);
var_export(
$coll->groupBy(
fn($row) => Carbon::parse($row['created_at'])->hour
)->toArray()
);
输出:
array (
10 =>
array (
0 =>
array (
'a' => 1,
'b' => 2,
'created_at' => '2021-01-01 10:10:10',
),
1 =>
array (
'a' => 5,
'b' => 6,
'created_at' => '2021-01-01 10:53:22',
),
),
11 =>
array (
0 =>
array (
'a' => 3,
'c' => 4,
'created_at' => '2021-01-01 11:10:10',
),
),
12 =>
array (
0 =>
array (
'a' => 7,
'c' => 8,
'created_at' => '2021-01-01 12:39:41',
),
),
)
如果您想删除第一级分组键,您可以在链接
->values()
之前链接->toArray()
。