5

我想做这样的事情:

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

所以它总是三人一组,每个级别都以一个字母递增。第一级是A,第二级是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被视为特殊追逐,因为它只有一个条目。

于 2013-05-30T08:02:43.173 回答
1

在 PHP 中,您可以在字符串上使用 ++,因此您不需要 Letter/toNumber 并且要支持无限嵌套,您需要递归(或者至少对您来说会更容易)

于 2013-05-30T07:56:41.117 回答