Laravel Collection 按日期时间列的小时值对行进行分组

问题描述 投票:0回答:3

我有一个来自 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 等

php laravel collections grouping php-carbon
3个回答
0
投票

希望有效果

$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);

0
投票

给你

 $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($array)->groupBy(function ($data)
        {
            return Carbon::createFromFormat('Y-m-d H:i:s', $data['created_at'])->hour;
        })->dd();

结果:


0
投票

我相信 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()

© www.soinside.com 2019 - 2024. All rights reserved.