输出 HTML 带数组的树

Output HTML Tree With Array

有没有更优雅的方法来输出给定的 html 数组结构?我找到了一些递归解决方案,但因此需要 parent_id(如果我理解正确的话)。

HTML

<ul>
  <li>Level 1</li>
  <li>
    <ul>
      <li>Level 2</li>
      <li>
        <ul>
          <li>Level 3</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

数组

Array
(
[0] => Level 1
[1] => Array
    (
        [0] => Level 2
        [1] => Array
            (
                [0] => Level 3
            )

    )

)

循环

<ul>
<?php foreach($array as $arr) : ?>
    <li>
    <?php if(is_array($arr)) : ?>
        <ul>
            <?php foreach($arr as $a) : ?>
                <li>
                <?php if(is_array($a)) : ?>
                    <ul>
                        <?php foreach($a as $aa) : ?>
                            <li><?php echo $aa; ?></li>
                        <?php endforeach; ?>
                    </ul>
                <?php else : ?>
                    <?php echo $a; ?>
                <?php endif; ?>
                </li>
            <?php endforeach; ?>
        </ul>
    <?php else : ?>
        <?php echo $arr; ?>
    <?php endif; ?>
    </li>
<?php endforeach; ?>
</ul>

我有点担心这种方法的性能 :-D

只做递归:

<?PHP

function doOutputList($TreeArray)
{
    echo '<ul>';
    foreach($TreeArray as $arr)
    {
        echo '<li>';
        if(is_array($arr)) 
        {
                doOutputList($arr);
        }
        else
        {
                echo $arr;
        }
        echo '</li>';
    }
    echo '</ul>';
}

doOutputList($array);

?>

或者如果你喜欢可读性好的HTML代码试试这个:

<?PHP

function doOutputList($TreeArray, $deep=0)
{
    $padding = str_repeat('  ', $deep*3);

    echo $padding . "<ul>\n";
    foreach($TreeArray as $arr)
    {
        echo $padding . "  <li>\n";
        if(is_array($arr)) 
        {
                doOutputList($arr, $deep+1);
        }
        else
        {
                echo $padding .'    '. $arr;
        }
        echo $padding . "  </li>\n";
    }
    echo $padding . "</ul>\n";
}

doOutputList($array);

?>