0

我正在研究一个原型,并且想构建一个多级导航 - 但不是通过循环遍历数组。我有一个 $depth 和一个 $children,它们应该确定导航的深度和每个级别的子级数量。所以 $depth = 4, $children = 8 将产生 4096 个菜单项。

这是我想要的输出片段:

<ul>
    <li class="level-1">
        <a href="#">Subject 1</a>
        <ul>
            <li class="level-2">
                <a href="#">Subject 1.1</a>
                <ul>
                    <li class="level-3">
                        <a href="#">Subject 1.1.1</a>
                    </li>
                    ...
                </ul>
            </li>
            ...
        </ul>
    </li>
    ...
</ul>

到目前为止,我已经尝试过这个,但我无法理解它:(

function draw_list ($depth, $children) {

  echo '<ul>';

  for ($i = 0; $i < $children; $i++) {

    echo '<li>' . ($i++);

    $depth--;

    if ($depth > 0) {

      echo draw_list($depth, $children);

    }

    echo '</li>';

  }

  echo '</ul>';


}
4

2 回答 2

0

我认为需要几件事......

  • $depth--;需要在循环for之外
  • 您增加$i了两次,一次在for语句中,然后再次在echo '<li>' . ($i++);
  • $depth 检查提前停止,所以 make>=而不是只是>编辑,考虑一下,这是一个不正确的陈述)

那应该给你...

function draw_list ($depth, $children) {  
  echo '<ul>';
  $depth--;
  for ($i = 0; $i < $children; $i++) {
    echo '<li>' . $i;
    if ($depth > 0) {
      echo draw_list($depth, $children);
    }
    echo '</li>';
  }
  echo '</ul>';
}

更新

对于级别编号的显示,请尝试将字符串值作为参数传递...

function draw_list ($depth, $children, $display=''){  
  echo '<ul>';
  $depth--;
  for ($i = 0; $i < $children; $i++) {
    echo '<li>' . $display . ($i + 1);
    if ($depth > 0) {
      echo draw_list($depth, $children, $display . ($i + 1) . '.');
    }
    echo '</li>';
  }
  echo '</ul>';
}
于 2012-08-26T19:56:36.877 回答
0

我最终这样做了:

function build_nav ($depth, $children, $levels = array()) {

    echo '<ul>';
    $depth--;
    for ($i = 0; $i < $children; $i++) {

        $levels[$depth] = $i+1;

        echo '<li>';
        echo 'Subject: ' . implode('.', $levels); 

        if ($depth > 0) {
            build_nav($depth, $children, $levels);
        }
        echo '</li>';
    } 
    echo '</ul>';
}
于 2012-08-26T21:36:06.817 回答