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ステートメントで 1 回、for次にステートメントで2 回インクリメントしていました。echo '<li>' . ($i++);
  • $depth チェックが 1 つ早く停止していたので、make>=の代わりに>( Edit、考えてみると、これは間違ったステートメントです)

それはあなたに与えるはずです...

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 に答える