2013-07-10 53 views
0

我已經做了從數據庫獲取多維菜單的功能。PHP多維對象菜單

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

它是工作壓力太大,但我怎麼能打印出來,甚至第三或第四子菜單,不manualy寫這些的foreach和IFS?由於

+2

使用遞歸 – Trogvar

回答

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

這是一個想法;)

+0

非常感謝一路通過數據男人完美地工作 – DeiForm