【问题标题】:Build a list tree with an array用数组构建列表树
【发布时间】:2019-02-27 19:35:43
【问题描述】:

我想用 html 元素“ul”和“li”生成一棵树。我希望最终结果看起来像这样。

My List
    Menu 1
        Menu 2
            Menu 3
        Menu 4
    Menu 5

但是当我运行我的代码时,结果看起来像这样:

My List
    Menu 1

这是我的 PHP 数组代码:

$lists = array(array(
    array(
        'id' => 1,
        'parent' => 0,
        'name' => 'Menu 1',
    ),
    array(
        'id' => 2,
        'parent' => 1,
        'name' => 'Menu 2',
    ),
    array(
        'id' => 3,
        'parent' => 2,
        'name' => 'Menu 3',
    ),
    array(
        'id' => 4,
        'parent' => 1,
        'name' => 'Menu 4',
    ),
    array(
        'id' => 4,
        'parent' => 0,
        'name' => 'Menu 5',
    )
));
?>
<ul>
<li><a>My List</a>
    <ul>
        <?php
        foreach($lists as $key=>$list) {
            ?>
            <li><a><?= $list[$key]['name']; ?></a></li>
            <?php
        }
        ?>
    </ul>
</li>
</ul>

【问题讨论】:

  • 没有关闭 &lt;/li&gt; 这个&lt;li&gt;&lt;a&gt;My List&lt;/a&gt;

标签: php html arrays arraylist tree


【解决方案1】:

您确实需要一个递归函数来构建这棵树。这是一个可以做你想做的事。请注意,它考虑了您在输入数据中拥有的额外(不必要的?)数组层,如果它实际上不存在,请从函数中对 $lists 的引用中删除 [0]:

function make_list($lists, $parent = 0) {
    $children = array_filter($lists[0], function ($v) use($parent) { return $v['parent'] == $parent; });
    if (!count($children)) return;
    echo "<ul>\n";
    foreach ($children as $child) {
        echo "<li>{$child['name']}</li>\n";
        make_list($lists, $child['id']);
    }
    echo "</ul>\n";
}

make_list($lists);

输出:

<ul>
  <li>Menu 1</li>
  <ul>
    <li>Menu 2</li>
    <ul>
      <li>Menu 3</li>
    </ul>
    <li>Menu 4</li>
  </ul>
  <li>Menu 5</li>
</ul>

Demo on 3v4l.org

【讨论】:

  • @NoName 不用担心。很高兴我能帮上忙。
  • 任何 ide 兄弟我如何将子父级添加到
  • ,示例
  • Menu
    • Sub Menu
  • @NoName 这基本上就是您已经在做的事情,您可以将它们添加到您的数据结构中,该函数应该为您生成结构。
  • 兄弟请阅读这个关于父母的问题并回答。太感谢了。 stackoverflow.com/questions/54933009/…
  • @NoName 我已经发布了一个答案,这只是对这个函数的一个小改动
  • 【解决方案2】:

    您仍然需要为父/子的事情做更多的事情,但要让它最初工作,只需使用额外的 array() 解开数组并访问基于没有 $key 的元素,如下所示:

    $lists = array(
        array(
            'id' => 1,
            'parent' => 0,
            'name' => 'Menu 1',
        ),
        array(
            'id' => 2,
            'parent' => 1,
            'name' => 'Menu 2',
        ),
        array(
            'id' => 3,
            'parent' => 2,
            'name' => 'Menu 3',
        ),
        array(
            'id' => 4,
            'parent' => 1,
            'name' => 'Menu 4',
        ),
        array(
            'id' => 4,
            'parent' => 0,
            'name' => 'Menu 5',
        )
    );
    ?>
    <ul>
    <li><a>My List</a>
        <ul>
            <?php
            foreach($lists as $key=>$list) {
                ?>
                <li><a><?= $list['name']; ?></a></li>
                <?php
            }
            ?>
        </ul>
    </li>
    

    【讨论】:

    • 谢谢,我正在等待人们向我展示父母的代码。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签