首先,我试图从我的数据库中回显我的HTML菜单数据。那部分工作正常。问题是,当我使用下面的代码时,它总是放
<ul></ul>
每个菜单项后。但是如果实际存在子菜单,我只想要<ul>
元素。
foreach($items as $item) {
if($item['parent_id'] == 0) {
echo "<li><a href='#'>".$item['menu']."</a>";
$id = $item['id'];
sub($items, $id);
echo "</li>";
}
}
echo "</ul>";
function sub($items, $id) {
echo "<ul>";
foreach($items as $item) {
if($item['parent_id'] == $id) {
echo "<li><a href='#'>".$item['menu']."</a>";
sub($items, $item['id']);
echo "</li>";
}
}
echo "</ul>";
}
?>
这是HTML结果:
<li><a href='#'>united states</a><ul>
<li><a href='#'>texas</a><ul></ul></li
<li><a href='#'>montana</a><ul></ul></li>
<li><a href='#'>washington</a><ul></ul></li></ul></li>
<li><a href='#'>india</a><ul>
<li><a href='#'>Maharashtra</a><ul></ul></li>
<li><a href='#'>Bihar</a><ul></ul></li>
<li><a href='#'>karnataka</a><ul>
<li><a href='#'>bangalore</a><ul></ul></li>
<li><a href='#'>belgaum</a><ul></ul></li>
<li><a href='#'>mysore</a><ul>
<li><a href='#'>brindavan</a><ul></ul></li>
<li><a href='#'>mysore palace</a><ul></ul></li></ul></li></ul></li></ul></li>
<li><a href='#'>russia</a><ul>
<li><a href='#'>moscow</a><ul></ul></li></ul></li>
<li><a href='#'>britan</a><ul></ul></li></ul>
你可以看到它把
<ul></ul>
每次菜单项后。我该如何摆脱它?
答案 0 :(得分:1)
在function sub()中尝试检查$ items
If count($items) > 0 then echo <ul>, run foreach and echo </ul>
答案 1 :(得分:0)
变化:
function sub($items, $id) {
echo "<ul>";
foreach($items as $item) {
if($item['parent_id'] == $id) {
echo "<li><a href='#'>".$item['menu']."</a>";
sub($items, $item['id']);
echo "</li>";
}
}
echo "</ul>";
}
要
function sub($items, $id) {
if($this->hasChildren($items, $id)){
echo "<ul>";
foreach($items as $item) {
if($item['parent_id'] == $id) {
echo "<li><a href='#'>".$item['menu']."</a>";
sub($items, $item['id']);
echo "</li>";
}
}
echo "</ul>";
}
}
function hasChildren(array $array, $parent_id)
{
foreach($array as $item)
{
if($item['parent_id'] === $parent_id) return true;
}
return false;
}
你需要确保在循环之前通过计算它们来实际拥有物品。目前,如果您没有$items
,则仍然会写<ul></ul>
。
在回显count
之前添加<ul>
意味着您只输出<ul>
并执行循环,如果您至少有1个项目。