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
相关产品推荐
相关产品推荐

