Laravel框架中如何通过foreach实现分类与下属Pages的嵌套数组合并
如何实现分类与子页面的嵌套数组结构
嘿,我看你现在的问题是没法把分类下的pages作为子节点嵌套进对应的分类数组,反而输出了平级的数组元素对吧?咱们来看看怎么调整代码解决这个问题:
问题根源
你原来的代码里,是先把分类对象单独推到$data数组,然后又把每个页面也单独作为新元素推进去,自然就变成了平级结构。正确的思路应该是给每个分类数组添加一个children字段,把该分类下的所有页面都放到这个字段里,再把完整的分类数组推到$data中。
修改后的代码
public function getCategory($lang): array { $data = []; $categories = Category::where('language', $lang)->with('pages')->get(); foreach ($categories as $category) { // 先初始化当前分类的基础数据 $categoryItem = [ 'title' => $category['title'], 'path' => $category['slug'], 'children' => [] // 提前预留children字段 ]; // 循环当前分类下的页面,添加到children数组 foreach ($category['pages'] as $page) { $categoryItem['children'][] = [ 'title' => $page['title'], 'path' => $page['slug'] ]; } // 把包含子页面的分类对象推到最终数据里 $data[] = $categoryItem; } return $data; }
修改后输出效果
这样调整后,输出就会变成嵌套结构了:
[ { "title": "corporate", "path": "corporate", "children": [ { "title": "corporatealt", "path": "corporatealt" }, { "title": "corporatealt2", "path": "corporatealt2" } ] }, { "title": "blabla", "path": "blabla", "children": [] // 如果该分类没有页面,会是空数组 } ]
额外优化小提示
如果有些分类可能没有关联的pages,你可以在初始化$categoryItem的时候,根据$category['pages']是否为空来决定是否保留children字段,不过通常保留空数组也不会有问题,反而结构更统一。
内容的提问来源于stack exchange,提问作者Liza
相关产品推荐
相关产品推荐

