Вы могли бы достичь этого с помощью чего-то подобного:
$collection = collect([
[
"date" => "2017-10-07 10:00:00",
"usage" => 0.423,
"costs" => 1.212
],
[
"date" => "2017-10-07 11:00:00",
"usage" => 0.786,
"costs" => 1.564
],
[
"date" => "2017-10-07 12:00:00",
"usage" => 0.542,
"costs" => 1.545
],
[
"date" => "2017-10-08 10:00:00",
"costs" => 1.1
],
[
"date" => "2017-10-08 11:00:00",
"usage" => 0.786,
],
[
"date" => "2017-10-08 12:00:00",
"costs" => 1.567
]
]);
return $collection->groupBy(function($row) {
return Carbon\Carbon::parse($row['date'])->format('Y-m-d');
})->map(function($value, $key) {
return [
'usage' => $value->sum('usage'),
'costs' => $value->sum('costs')
];
});
Вывод вышеприведенного будет таким:
Collection {#267 ▼
#items: array:2 [▼
"2017-10-07" => array:2 [▶]
"2017-10-08" => array:2 [▼
"usage" => 0.786
"costs" => 2.667
]
]
}
Как вы можете видеть из приведенного выше, некоторые изпредметы не имеют usage
или costs
.Это все еще будет работать.
Вот также пример , с которым вы можете играть.