如何使用php创建菜单树?

时间:2020-06-06 04:01:08

标签: php laravel eloquent

我正在开发一个电子商务平台,管理员可以在其中管理菜单,类别和子类别。现在,我要在大型菜单中显示它。

Menu1
    Category1.1
        SubCategory1
        SubCategory2
    Category1.2
        SubCategory
Menu2
    Category2.1
        SubCategory1

这是我提出的可能结构。 我有2个数据库表-菜单,类别。在类别中,有一个名为sub_category的列,其中用,分隔符存储子类别值。

现在,在执行以下查询后-

$data = DB::select('SELECT m.id AS mId, m.name AS menu, 
m.meta_keywords AS menu_keywords, m.meta_description AS menu_description, 
c.id AS cId, c.name AS category, c.sub_category, c.meta_keywords AS
category_keywords, c.meta_description AS category_description 
FROM `menu` AS m LEFT JOIN `category` AS c ON c.menuId = m.id 
WHERE m.is_publish = 1 AND c.is_publish = 1');

我正在取得结果。click

现在,我想建立一棵树,在这里我可以得到类似这样的结果-

"id" => 1,
"name" => "Fashion"
"category" => [
    1 => [
        "cId" => 1,
        "category" => "Men"
        "sub_category" => "Shirt, T-shirt"
    ],
    2 => [
        "cId" => 2,
        "category" => "Women"
        "sub_category" => ""
    ],
] 

请帮助我找出解决方案。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

根据您的数据库结构和要求,您可以使用以下功能-

public function menuTree($data){
        $menuId = $menu = $sub = $op = array();
        foreach($data as $d){
            if(in_array($d->mId, $menuId)){
                $sub['cId'] = $d->cId;
                $sub['category'] = $d->category;
                $sub['sub_category'] = $d->sub_category;
                $sub['category_keywords'] = $d->category_keywords;
                $sub['category_description'] = $d->category_description;
                $menu[$d->mId]['category'][] = $sub;
            } else {
                $menuId[] = $d->mId;
                $op['id'] = $d->mId;
                $op['menu'] = $d->menu;
                $op['menu_keywords'] = $d->menu_keywords;
                $op['menu_description'] = $d->menu_description;
                $menu[$d->mId] = $op;
                if($d->cId != NULL){
                    $sub['cId'] = $d->cId;
                    $sub['category'] = $d->category;
                    $sub['sub_category'] = $d->sub_category;
                    $sub['category_keywords'] = $d->category_keywords;
                    $sub['category_description'] = $d->category_description;
                    $menu[$d->mId]['category'][] = $sub;
                }
            }
        }
        return $menu;
    }

我仍然相信会有更好的解决方案。希望这对您有用。

相关问题