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

Laravel遍历Product构建分类商品数组仅返回单条数据如何解决

按商品分类存储全量商品信息的修改方案

问题根因

  • 目标数组变量名错误:循环内错误操作了单个商品对象$product,而非你提前定义的结果数组$productArr
  • 赋值逻辑错误:每次直接给分类键赋值单条商品数据,会覆盖之前同分类下的已有内容,最终仅能保留最后一条同分类商品

修复后的代码

通用循环写法

$products = Product::all();

$productArr = [];
foreach($products as $product)
{
    // 首次遇到该分类时先初始化空数组
    if (!isset($productArr[$product->category])) {
        $productArr[$product->category] = [];
    }
    // 向分类数组追加新商品,不会覆盖原有内容
    $productArr[$product->category][] = [
        'name' => $product->name,
        'price' => $product->price
    ];
}

dd($productArr);

最终输出的结构符合需求:

'tshirts' => [
    [
        'name' => 'tshirt 1',
        'price' => 99
    ],
    [
        'name' => 'tshirt 2',
        'price' => 129
    ]
    // 该分类下其余商品
]

Laravel框架快捷写法(基于集合操作)

如果你用的是Laravel框架,可以直接用集合的内置方法实现,无需手动写循环:

$productArr = Product::all()
    ->groupBy('category')
    ->map(fn ($products) => $products->map(fn ($product) => [
        'name' => $product->name,
        'price' => $product->price
    ])->toArray())
    ->toArray();

dd($productArr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 06:45:04