0

我已经实现了从数据库中获取多用户菜单的功能。

public function get_menu($parent=0,$vis=1) {
        $categories = array();
        $this->db->from('ci_categories');
        $this->db->where('cat_child',$parent);
        $this->db->where('cat_vis',1);
        $this->db->order_by('cat_order');
        $q = $this->db->get();

        $result = $q->result();

        $i=0;
        foreach($result as $mainCategory) {
            $mainCategory->cat_subcategories = $this->get_menu($mainCategory->cat_id);
            $categories[$i] = $mainCategory;
            $i++;
        }

        return $categories;
    }

它正在工作,但我想打印出菜单。现在我可以使用以下代码打印主菜单和一个孩子:

if (count($menu) > 0) {
    foreach($menu as $menu_item) {
    $link = anchor("category/".$menu_item->cat_url, $menu_item->cat_name);

    echo "<li>$link";

    if (!empty($menu_item->cat_subcategories)) {
       echo "<ul>";
       foreach($menu_item->cat_subcategories as $subcat) {
         $sub_link = anchor("category/".$subcat->cat_url, $subcat->cat_name);
         echo "<li>$sub_link</li>";
    }
           echo "</ul>";
        }

    echo "</li>";
        }
    }

它也可以工作,但是如果不手动编写那些 foreach 和 ifs,我怎么能打印出第三或第四个子菜单?谢谢

4

1 回答 1

2

您可以尝试递归函数...

就像是:

function showMenu($menu) {
    echo "<ul>";
    foreach ($menu as $menu_item) {
        $link = anchor("category/".$menu_item->cat_url, $menu_item->cat_name);
        echo "<li>$link";
        if (!empty($menu_item->cat_subcategories)) showMenu($menu_item->cat_subcategories);
        echo "</li>";
    }
    echo "</ul>";
}

这是一个想法;)

于 2013-07-10T14:49:37.980 回答