2013-02-21 2 views
0

В настоящее время я повторяю массив, исходящий из запроса, и мне нужно представить их во вложенных неупорядоченных списках. Я пытаюсь найти способ сделать эту процедуру бесконечно, потому что в настоящее время я вручную перекликаю каждую вложенную ul (если она есть) только до той глубины, которую я вручную кодирую. Пожалуйста, помогите мне, если есть способ автоматически отозвать ul до глубины «n».PHP: динамически вложенные неупорядоченные списки

Это моя текущая логика только вторя до глубины 5:

<ul class="parent_tree"><?php 
    foreach($category_tree as $category_level_1) 
    { 
    echo '<li><a href="#">' . $category_level_1['name'] . '</a>'; 

    if(array_key_exists('children', $category_level_1)) 
    { 
     echo '<ul>'; 

     foreach($category_level_1['children'] as $category_level_2) 
     { 
     echo '<li><a href="#">' . $category_level_2['name'] . '</a>'; 

     if(array_key_exists('children', $category_level_2)) 
     { 
      echo '<ul>'; 

      foreach($category_level_2['children'] as $category_level_3) 
      { 
      echo '<li><a href="#">' . $category_level_3['name'] . '</a>'; 

      if(array_key_exists('children', $category_level_3)) 
      { 
       echo '<ul>'; 

       foreach($category_level_3['children'] as $category_level_4) 
       { 
       echo '<li><a href="#">' . $category_level_4['name'] . '</a>'; 

       if(array_key_exists('children', $category_level_4)) 
       { 
        echo '<ul>'; 

        foreach($category_level_4['children'] as $category_level_5) 
        { 
        echo '<li><a href="#">' . $category_level_5['name'] . '</a>'; 

        //level 6 goes here 

        echo '</li>'; 
        } 

        echo '</ul>'; 
       } 

       echo '</li>'; 
       } 

       echo '</ul>'; 
      } 

      echo '</li>'; 
      } 

      echo '</ul>'; 
     } 

     echo '</li>'; 
     } 

     echo '</ul>'; 
    } 

    echo '</li>'; 
    } 
?> 
</ul> 
+1

Вы слышали о рекурсии? – deadlock

+0

Возможный дубликат [Дерево меню эха с рекурсивной функцией] (http://stackoverflow.com/questions/10782810/echo-menu-tree-with-recursive-function) – mario

ответ

1

Не проверял, но вы хотели бы использовать рекурсию для этого. В основном вы продолжаете вызывать одну и ту же функцию с разными параметрами. Он пройдет через все и выйдет, когда больше нет детских массивов.

function recursive_list($category) { 
    echo '<ul>'; 
    foreach($category as $item){ 
     echo '<li><a href="#">' . $item['name'] . '</a>'; 
     if(array_key_exists('children', $item)) { 
      recursive_list($item); 
     } 
    } 
} 
Смежные вопросы