2013-07-10 1 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>"; 
     } 
    } 

Это работает тоже, но как я мог распечатать даже третью или четвёртую подменю без Мануалы писать эти Еогеасп и сослагательного наклонения? Благодаря

+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

Смежные вопросы