如何结合嵌套关联数组与pluck方法实现指定结构转换?
Laravel 集合转换:扁平结构转嵌套键值对
当前代码及输出
执行以下代码:
Model1::all() ->map() ->only(['c1', 'c2', 'c3'])
得到的扁平集合结果:
[ { "c1": "v11", "c2": "v21a", "c3": "v31a" }, { "c1": "v11", "c2": "v21b", "c3": "v31b" }, { "c1": "v12", "c2": "v22a", "c3": "v32a" } ]
期望输出结构
需要将上述集合转换为以下嵌套键值对结构:
{ "v11": { "v21a": "v31a", "v21b": "v31b" }, "v12": { "v22a": "v32a" } }
解决方案
经过尝试,最终通过以下代码实现需求:
Model1::all() ->map() ->only(['c1', 'c2', 'c3']) ->groupBy('c1') ->map(fn($item) => $item->pluck('c3', 'c2'))
代码逻辑说明
groupBy('c1'):以c1字段的值为分组依据,将原集合拆分为以v11、v12为键的分组集合map(fn($item) => $item->pluck('c3', 'c2')):遍历每个分组集合,用pluck('c3', 'c2')将分组内的c2作为键、c3作为值,生成对应关联数组,最终组合成目标嵌套结构
内容的提问来源于stack exchange,提问作者user5462121
相关产品推荐
相关产品推荐

