我想生成一个带有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>
答案 0 :(得分:1)
您确实需要递归函数来构建此树。这是一款可以满足您需求的产品。请注意,它考虑了输入数据中额外的(不必要的?)数组层,如果实际上不存在,请从函数中对[0]
的引用中删除$lists
: / p>
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>
答案 1 :(得分:0)
对于父/子事情,您还有很多事情要做,但是要使其开始工作,只需用额外的array()
解开数组,然后访问不包含{{1}的基于元素}:
$key