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

Laravel循环分类及关联产品时数组结构错误求助

修正分类与关联产品的数组结构问题

嘿,这个问题我熟!你当前的代码错误在于:把所有分类的产品都直接追加到了$categoriesData数组的product_details键下,而不是每个分类对象内部的product_details数组里。这样自然会导致所有产品混在一起,没有归属到对应分类。

方法一:修正原生foreach循环

直接调整循环逻辑,让每个分类先构建包含自身信息和空产品数组的结构,再把对应产品塞进该分类的product_details里:

// 先初始化空数组
$categoriesData = [];

foreach($categoryData as $row){
    // 先创建当前分类的基础数组,包含初始化的product_details
    $categoryItem = [
        'id' => $row->id,
        'category_name' => $row->title, // 对应你期望格式里的category_name字段
        'product_details' => []
    ];

    // 循环当前分类下的产品,添加到该分类的product_details中
    foreach($row->product as $rowproduct){
        $categoryItem['product_details'][] = [
            'id' => $rowproduct->id, // 别忘了添加产品ID,和你期望的格式匹配
            'product_name' => $rowproduct->name,
            'product_price' => $rowproduct->price // 原代码保留的价格字段,按需取舍
        ];
    }

    // 把完整的分类项加入总数组
    $categoriesData[] = $categoryItem;
}

// 如果你需要外层包裹categoriesData键,就再包一层
$result = [
    'categoriesData' => $categoriesData
];

方法二:用Laravel集合简化代码(更优雅)

既然你用的是Laravel,完全可以利用集合的map方法来避免嵌套foreach,代码更简洁:

$result = [
    'categoriesData' => $categoryData->map(function($category) {
        return [
            'id' => $category->id,
            'category_name' => $category->title,
            'product_details' => $category->product->map(function($product) {
                return [
                    'id' => $product->id,
                    'product_name' => $product->name,
                    'product_price' => $product->price
                ];
            })->toArray() // 把产品集合转成数组
        ];
    })->toArray() // 把分类集合转成数组
];

这两种方法最终都会生成你期望的数组结构:每个分类对象都包含自己专属的product_details数组,产品不会跨分类混放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:07:33