【问题标题】:Nested 'for' loops in PHP to create hierarchical unordered listPHP中的嵌套'for'循环以创建分层无序列表
【发布时间】:2013-02-28 17:59:42
【问题描述】:

我正在尝试使用 php 循环创建嵌套的无序列表。我尝试了不同的方法,但我需要您的帮助来改进我的代码。假设在这个例子中我想要四个级别。

这是我的 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 输出:

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

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

非常感谢您的回复!

【问题讨论】:

  • 首先构造一个数组,该数组代表您要放入这些元素中的内容。
  • @Jon 为什么?这与内容无关,而仅与结构有关。我只是想获得那种结构,但我想让关卡的数量动态化。
  • @Shef 可能,但我不知道怎么做!
  • @romainbriand Jon 给了你一个明智的建议。用真实/虚拟数据构建一个样本数组,以便您可以从中看到解决方案。让我看看能不能帮你解答。

标签: php html


【解决方案1】:

如果你有特定格式的数组,你可以使用recursive functions

1。示例数组

$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。递归函数

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 缩进,不是函数)

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

【讨论】:

  • 太棒了!因此我理解需要一个数组:) 非常感谢!
  • @romainbriand 我很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 2017-08-24
  • 2016-02-14
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
相关资源
最近更新 更多