如何为Laravel集合的每行添加元素存储该行所有值的总和?
Laravel集合添加每行总和字段的实现
原始数据结构
假设你的Laravel集合中每个元素是类似这样的月份数据:
"Aug-2022" => [ "annualbuffalomilksalerecordforcustomer" => "8.00", "annuala2milksalerecordforcustomer" => "5.50", "annualjerseymilksalerecordforcustomer" => "2.50", "annualbuffalomilksalerecord" => "168.00", "annuala2milksalerecord" => "0.00", "annualjerseymilksalerecord" => "390.00" ]
需求
计算每个月份数组中所有数值的总和,新增sumofmilksale字段并赋值为求和结果(如示例中的574.00)。
解决方案
使用Laravel集合的map方法遍历处理每个元素,结合sum方法计算总和,最后格式化结果并添加新字段:
$processedCollection = $yourOriginalCollection->map(function ($monthData) { // 将字符串数值转为浮点型后求和 $total = collect($monthData)->sum(function ($value) { return (float)$value; }); // 保留两位小数,保持和原有数据格式一致 $monthData['sumofmilksale'] = number_format($total, 2); return $monthData; });
或者用更简洁的箭头函数写法:
$processedCollection = $yourOriginalCollection->map(fn($monthData) => array_merge($monthData, [ 'sumofmilksale' => sprintf("%.2f", collect($monthData)->sum(fn($val) => (float)$val)) ]));
处理后结果
每个月份数组会新增目标字段,结构如下:
"Aug-2022" => [ "annualbuffalomilksalerecordforcustomer" => "8.00", "annuala2milksalerecordforcustomer" => "5.50", "annualjerseymilksalerecordforcustomer" => "2.50", "annualbuffalomilksalerecord" => "168.00", "annuala2milksalerecord" => "0.00", "annualjerseymilksalerecord" => "390.00", "sumofmilksale" => "574.00" ]
内容的提问来源于stack exchange,提问作者Rahul W
相关产品推荐
相关产品推荐

