首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用数组构建列表树

使用数组构建列表树
EN

Stack Overflow用户
提问于 2019-02-28 03:35:43
回答 2查看 151关注 0票数 1

我想生成一个包含html元素"ul“和"li”的树。我希望最终的结果看起来像这样。

代码语言:javascript
复制
My List
    Menu 1
        Menu 2
            Menu 3
        Menu 4
    Menu 5

但是当我运行我的代码时,结果如下所示:

代码语言:javascript
复制
My List
    Menu 1

下面是我的PHP数组代码:

代码语言:javascript
复制
$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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-28 04:44:04

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

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
<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

票数 0
EN

Stack Overflow用户

发布于 2019-02-28 03:56:27

对于父/子元素,您还需要做更多的工作,但要让它在一开始工作,只需用额外的array()解包数组,并访问基于不带$key的元素,如下所示:

代码语言:javascript
复制
$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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54913201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档