我想生成一个包含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>
发布于 2019-02-28 04:44:04
你确实需要一个递归函数来构建这棵树。这里有一个可以做你想做的事情。请注意,它考虑了额外的(不必要的?)如果输入数据中的数组层不存在,则从函数中对$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>
发布于 2019-02-28 03:56:27
对于父/子元素,您还需要做更多的工作,但要让它在一开始工作,只需用额外的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>
https://stackoverflow.com/questions/54913201
复制相似问题