Laravel:按studentId汇总多维数组集合的marks值
Laravel Collection按studentId汇总marks值
可以通过Laravel Collection的链式方法快速实现需求,代码如下:
$result = $collection ->flatten(1) ->groupBy('studentId') ->map(function ($group) { return [ 'studentId' => $group->first()['studentId'], 'marks' => $group->sum('marks') ]; }) ->values() ->all();
步骤说明:
flatten(1):将嵌套的学生记录提取到同一层级,把原集合的二维嵌套结构转为一维的学生记录集合。groupBy('studentId'):按照studentId对所有学生记录分组,相同ID的记录会被归到同一组。map():遍历每个分组,构建目标格式的数组——取分组内的学生ID(同一组ID一致),并对该组的marks字段求和。values():移除分组后生成的以studentId为键的索引,转为连续数字索引的集合。all():将最终的Collection转为普通PHP数组(若需保留Collection实例可省略此方法)。
执行后即可得到预期结果:
[ ["studentId" => 3, "marks" => 40], ["studentId" => 7, "marks" => 50], ]
内容的提问来源于stack exchange,提问作者Husmukh
相关产品推荐
相关产品推荐

