PHP:动态嵌套无序列表

时间:2013-02-21 04:07:03

标签: php html-lists performance

我目前正在回应来自查询的数组,我需要在嵌套的无序列表中显示它们。我试图找到一种方法无限地执行此过程,因为我目前手动回显每个嵌套的ul(如果他们有一个),只有我手动编码的深度。如果有办法自动回复ul的深度“n”,请帮助我。

这是我目前的逻辑,只能回应深度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 个答案:

答案 0 :(得分: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);
        }
    }
}