基于attribute_set_id将inventory属性合并至options集合的技术问询
解决方案:将Inventory属性合并到Options集合中
问题分析
需要基于attribute_set_id,把inventory中的attributes(仅保留name字段)合并到对应的options条目里,同时完整保留options原有的所有字段(如attribute_set_id、name、position)。
修正后的实现代码
// 初始化处理后的options,保留原字段并初始化attributes数组 $processedOptions = []; foreach ($item->options as $option) { // 将对象转为数组(若$option是对象类型,否则可直接使用) $optionData = (array)$option; $optionData['attributes'] = []; // 用attribute_set_id作为键,便于后续快速匹配 $processedOptions[$option->attribute_set_id] = $optionData; } // 遍历inventory中的属性,匹配到对应option并添加 foreach ($item->inventory as $inventory) { foreach ($inventory->attributes as $attribute) { $setId = $attribute->attribute_set_id; if (isset($processedOptions[$setId])) { // 仅保留name字段,贴合期望结果结构 $processedOptions[$setId]['attributes'][] = [ 'name' => $attribute->name ]; } } } // 转回索引数组,保持与原options相同的结构 $finalOptions = array_values($processedOptions); // 查看最终结果 dd($finalOptions);
原代码存在的问题说明
- 丢失原option字段:原代码仅保留了
name字段,丢失了attribute_set_id、position等原有属性 - 属性结构不符合预期:直接存入完整的
attribute对象,而需求仅需要name字段 - 数组结构异常:用
attribute->id作为attributes数组的键,导致生成关联数组,而期望是索引数组
结果验证
执行上述代码后,$finalOptions的结构将完全匹配你给出的期望结果:每个options条目保留所有原字段,并按attribute_set_id正确关联对应属性。
内容的提问来源于stack exchange,提问作者Kovi
相关产品推荐
相关产品推荐

