php - 在嵌套的 laravel 集合上分组
问题描述
我已经开始进行一些数据分析,数据真的很混乱,所以我必须将时间戳转换为可读的日期和时间等等。
我已经尝试过标准 group by 但它没有成功,因为数组是嵌套的,我不知道如何处理。
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[0] => Array
(
[name] => Entity 1
[values] => Array
(
[0] => Array
(
[date] => 08.07.2019
[time] => 00:00
[counter] => 1
)
[1] => Array
(
[date] => 08.07.2019
[time] => 01:00
[counter] => 3
)
[167] => Array
(
[date] => 14.07.2019
[time] => 23:00
[counter] => 0
)
)
)
[1] => Array
(
[name] => Entity 2
[values] => Array
(
[0] => Array
(
[date] => 08.07.2019
[time] => 00:00
[counter] => 0
)
[1] => Array
(
[date] => 08.07.2019
[time] => 01:00
[counter] => 4
)
[2] => Array
(
[date] => 08.07.2019
[time] => 02:00
[counter] => 12
)
[3] => Array
(
[date] => 09.07.2019
[time] => 03:00
[counter] => 0
)
[4] => Array
(
[date] => 10.07.2019
[time] => 04:00
[counter] => 4
)
[5] => Array
(
[date] => 11.07.2019
[time] => 05:00
[counter] => 17
)
)
)
那么按日期分组的正确方法是什么,例如,我可以为一个日期获取一个数组
日期 08.07:时间:02:00 计数器:12
timer: 04:00
counter: 1
日期 14.07:时间:05:00 计数器:1
time: 08:00
counter: 3
time: 01:00
counter: 6
抱歉转储数组示例
我试过类似的东西:
$collection = collect($values);
$groupedBy = $collection->groupBy('date);
但这不起作用,因为它是一个嵌套数组。
解决方案
在分组之前,您可以减少集合以仅具有项目的值。之后,您可以简单地使用按日期和时间分组:
$grouped = $collection
->reduce(function(Collection $carry, $item) {
return $carry->merge($item['values']);
}, new Collection())
->groupBy(function($item) {
return sprintf('%s %s', $item['date'], $item['time']);
});
Collection
进口在哪里Illuminate\Support\Collection
推荐阅读
- azure-cosmosdb - 如何从 VM 外部的 firefox OSX 连接到 cosmosdb 模拟器?
- python - 当我尝试使用 winrt 发出通知时,没有显示通知
- python - argparse.ArgumentError:参数--skip-checks:冲突的选项字符串:--skip-checks
- asp.net-core - UseDotNet@2 任务是否安装了 Hosting Bundle?
- django - 如何在 Django 查询中使用列表来添加字段
- django - 无法从 django 中的会话字典的键中提取值
- django - Django - 如何动态选择基本模板
- python - 检测和删除 Python pandas 数据框中不需要的单元格
- sql-server - 如何在 SSMS 中使用 Invoke-Sqlcmd?
- javascript - 如何在我的地图中包含来自另一个数组的数据?