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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:54:07