【问题标题】:PHP Multidimensional object menuPHP 多维对象菜单
【发布时间】:2013-07-08 13:04:26
【问题描述】:

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

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,我怎么能打印出第三或第四个子菜单呢?谢谢

【问题讨论】:

  • 使用递归遍历您的数据

标签: php loops object multidimensional-array


【解决方案1】:

你可以试试递归函数……

类似:

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>";
}

这是一个想法;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2012-10-07
    相关资源
    最近更新 更多