在PHP中自动生成/循环特定的无序列表

时间:2013-05-30 07:43:31

标签: php html

我想做这样的事情:

  • 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.

2 个答案:

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

在PHP中,您可以在字符串上使用++,因此您不需要Letter / toNumber 为了支持无限制的嵌套,你需要一个递归(或者至少它会更容易)