在PHP中嵌套'for'循环来创建分层无序列表

问题描述:

我试图用php循环创建嵌套的无序列表。我尝试过不同的事情,但我需要你的帮助来改进我的代码。

I'm trying to create nested unordered list with php loops. I've tried different things but I need your help to improve my code. Let say in this example that I want four levels.

这是我的PHP代码:

<ul>
<?php
for($i = 0; $i < 1; $i++): ?>
<li>
    <ul>
    <?php for($j = 0; $j <2; $j++): ?>
        <li>
            <ul>
                <?php for($k = 0; $k <2; $k++): ?>
                <li>
                    <ul>
                        <?php for($l = 0; $l <2; $l++): ?>
                        <li></li>
                        <?php endfor; ?>
                    </ul>
                </li>
                <?php endfor; ?>
            </ul>
        </li>
    <?php endfor; ?>
    </ul>
</li>
<?php
endfor;
?>
</ul>

这是我的HTML输出:

Here is my HTML output :

<ul>
<li>
    <ul>
        <li>
            <ul>
                <li>
                    <ul>
                        <li></li>
                        <li></li>
                    </ul>
                </li>
                <li>
                    <ul>
                        <li></li>
                        <li></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li>
            <ul>
                <li>
                    <ul>
                        <li></li>
                        <li></li>
                    </ul>
                </li>
                <li>
                    <ul>
                        <li></li>
                        <li></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</li>
</ul>

有更聪明的方法吗?但愿如此。我想知道,因为我的目标是动态地定义层数,而我所做的并不是动态的! :)

Is there a smarter way to do so? I hope so. I would like to know because I aim to define number of levels dynamically and what I've done is not dynamic at all! :)

非常感谢您的回复!

您可以使用递归函数,如果您有数组某些格式。

1。例子array



You can use recursive functions if you have the array in a certain format.

$arr = array(
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
    'Aenean id erat et justo eleifend dapibus iaculis non diam.',
    array(
        'Donec viverra mauris sit amet nulla semper sit amet venenatis urna elementum.',
        'Aliquam bibendum arcu metus, vitae pellentesque felis.',
        'Etiam eu erat est, sit amet mollis justo.',
        array(
            'Cras luctus nulla vitae turpis bibendum rutrum.',
            'Donec vel sem mi, eu viverra magna.',
            'Aliquam non leo vitae turpis commodo malesuada.',
            'Suspendisse congue nulla nec justo molestie convallis sodales dolor tincidunt.',
            array(
                'Etiam blandit dictum metus, eget ullamcorper odio commodo eu.',
                'Integer congue eros a mauris feugiat volutpat.',
                'Sed nec diam sem, ac sollicitudin libero.',
                'Phasellus vulputate tincidunt risus, vitae convallis nisi feugiat id.',
                'Donec vehicula lobortis magna, sed euismod massa tristique sed.',
            ),
        ),
        'Fusce vel sem sem, non volutpat nisi.',
        'Pellentesque molestie ipsum vitae orci sodales iaculis.',
    ),
);



2。递归函数



2. The recursive function

function list_it($data_array, $list_tag = 'ul') {
    // enforce valid list tag
    if ($list_tag != 'ul' && $list_tag != 'ol')
        $list_tag = 'ul';

    // we need an array with data
    if (!is_array($data_array) || empty($data_array))
        return;
    echo '<',$list_tag,'>';

    foreach ($data_array as $element) {
        if (is_array($element)) {
            list_it($element);
        }
        else {
            echo '<li>',$element,'</li>';
        }
    }
    echo '</',$list_tag,'>';
}

list_it($arr, 'ul');



3。输出(由我添加的HTML缩进,不是函数)



3. Output (HTML indentation added by me, not the function)

<ul>
    <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
    <li>Aenean id erat et justo eleifend dapibus iaculis non diam.</li>
    <ul>
        <li>Donec viverra mauris sit amet nulla semper sit amet venenatis urna elementum.</li>
        <li>Aliquam bibendum arcu metus, vitae pellentesque felis.</li>
        <li>Etiam eu erat est, sit amet mollis justo.</li>
        <ul>
            <li>Cras luctus nulla vitae turpis bibendum rutrum.</li>
            <li>Donec vel sem mi, eu viverra magna.</li>
            <li>Aliquam non leo vitae turpis commodo malesuada.</li>
            <li>Suspendisse congue nulla nec justo molestie convallis sodales dolor tincidunt.</li>
            <ul>
                <li>Etiam blandit dictum metus, eget ullamcorper odio commodo eu.</li>
                <li>Integer congue eros a mauris feugiat volutpat.</li>
                <li>Sed nec diam sem, ac sollicitudin libero.</li>
                <li>Phasellus vulputate tincidunt risus, vitae convallis nisi feugiat id.</li>
                <li>Donec vehicula lobortis magna, sed euismod massa tristique sed.</li>
            </ul>
        </ul>
        <li>Fusce vel sem sem, non volutpat nisi.</li>
        <li>Pellentesque molestie ipsum vitae orci sodales iaculis.</li>
    </ul>
</ul>