5

私はこのようなものを作りたい:

  • A1
    • B1
      • C1
        • D1
        • D2
        • D3
      • C2
      • C3
    • B2
      • C4
        • D10
        • D11
        • D12
      • C5
      • C6
    • B3
      • C7
      • C8
      • C9
        • D25
        • D26
        • D27

したがって、常に 3 つのグループであり、各レベルは 1 文字ずつ昇順です。最初のレベルは A、2 番目の B、C、D、E などです。番号も昇順で表示されます。レベル A は 1、B は 3、C は 9、D は 27 などです。

これは手動で生成するのが非常に簡単で、文字を ASCII に相当するものに変換し、文字を追加して、それらを文字に相当するものに再度変換します。問題は、たとえば、S までループする必要があることです。私の心は、ループ内にループを入れようとしてますます混乱しています。

私が得たもの(toLetterとtoNumberは文字通り彼らがすることをします):

  echo "<ul><li>";
    echo "A1";
     echo "<ul><li>";
      $b = toNumber(A);
      $b++;
      $b = toLetter($b);
      $bnum = 1 - 1;
      $bnum = $bnum * 3;
      $bnum++;

      echo $b;
      echo $bnum."</li>";
      $bnum++;
      echo "<li>".$b;
      echo $bnum."</li>";
      $bnum++;
      echo "<li>".$b;
      echo $bnum."</li>";

これを作る:

  • A1
    • B1
    • B2
    • B3

Zまで到達できるようにすべてをループする方法が本当にわかりません.

4

2 に答える 2

3

「C」レベルまでしか上がらない非常にシンプルなバージョン。必要に応じて増やします。

<?php

function outputListItems($char) {
    static $index = array('A' => 1);

    if (!isset($index[$char])) {
        $index[$char] = 1;
    }

    for ($i = 0; $i < 3; $i++) {
        echo '<li>';
        echo $char;
        echo $index[$char]++;

        if ($char < 'C') {
            echo '<ul>';
            $nextChar = $char;
            outputListItems(++$nextChar);
            echo '</ul>';
        }

        echo '</li>';
    }
}

?>

<ul>
    <li>
        A1
        <ul><?php outputListItems('B'); ?></ul>
    </li>
</ul>

Aエントリが 1 つしかないため、特別なチェイスとして扱われます。

于 2013-05-30T08:02:43.173 に答える
1

PHP では、文字列に対して ++ を使用できるため、Letter/toNumber を使用する必要はありません。また、無制限のネストをサポートするには、再帰が必要です (または、少なくともそのほうが簡単です)。

于 2013-05-30T07:56:41.117 に答える