You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何按name字段对JSON数据的data键值进行分组聚合

Laravel按name字段分组合并data值实现方案

直接使用Laravel自带的集合(Collection)工具即可快速完成分组处理,以下是完整实现代码:

  1. 首先解码原始JSON数据,提取动物列表数组
// 替换为你实际的原始JSON字符串
$originalJson = '{"animals":[{"name":"Cumi-Cumi","data":1000},{"name":"Udang","data":300},{"name":"Baranang","data":12000},{"name":"Cumi-Cumi","data":1500},{"name":"Udang","data":500},{"name":"Baranang","data":17000},{"name":"Cumi-Cumi","data":2500}]}';
$originalData = json_decode($originalJson, true);
$animalList = collect($originalData['animals']);
  1. 按name字段分组,重组每组的data数组
$processedAnimals = $animalList
    // 按name分组,如需统一name大小写可在分组时转换:groupBy(fn($i) => strtolower($i['name']))
    ->groupBy('name')
    ->map(function ($itemGroup, $name) {
        return [
            'name' => $name,
            // 提取当前分组下所有data值组成数组
            'data' => $itemGroup->pluck('data')->toArray()
        ];
    })
    // 重置索引,避免json编码时转为对象格式
    ->values()
    ->toArray();
  1. 组装最终结构输出JSON
$result = [
    'animals' => $processedAnimals
];
// 输出格式化的JSON(线上环境可去掉JSON_PRETTY_PRINT参数)
return response()->json($result, 200, [], JSON_PRETTY_PRINT);

注意事项

如果你的示例中需要将Udang转为小写udang,只需要修改groupBy和返回name的逻辑即可:

->groupBy(fn($item) => strtolower($item['name']))
->map(function ($itemGroup, $lowerName) {
    return [
        'name' => $lowerName,
        'data' => $itemGroup->pluck('data')->toArray()
    ];
})

内容的提问来源于stack exchange,提问作者SIFA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 12:45:03