我有一个父子系统。我正在尝试创建一个三级菜单,但第一级菜单在所有三级菜单中都重复出现。
下面是我的数据库表的示例数据
id category parent
1 level a one 0
2 level b one 0
3 level two 1 for a 1
4 level two 2 for a 1
5 level three for level two 1 for a 3PHP代码:
<?php
include("core/functions.php");
?>
<div id="magik-verticalmenu" class="block magik-verticalmenu">
<div class="nav-title"> <span>Categories</span> </div>
<div class="nav-content">
<div class="navbar navbar-inverse">
<div id="verticalmenu" class="verticalmenu" role="navigation">
<?php
$sql = "SELECT * FROM category WHERE parent = 0";
$pquery = $con->query($sql);
?>
<div class="navbar">
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav verticalmenu">
<?php
while($parent = mysqli_fetch_assoc($pquery)):
?>
<?php
$parent_id = $parent['id'];
$sql2 = "SELECT * FROM category WHERE parent = 'parent_id'";
$cquery= $con->query($sql2);
?>
<li class=" parent dropdown ">
<a href="grid.html" class="dropdown-toggle" data-toggle="dropdown">
<span class="menu-title">
<?php
echo $parent ['category'];
?>
</span><b class="round-arrow"></b>
</a>
<div class="dropdown-menu">
<div class="dropdown-menu-inner">
<div class="row">
<div class="mega-col col-sm-66" data-widgets="wid-5" data-colwidth="6">
<div class="mega-col-inner">
<div class="ves-widget">
<?php
while($child = mysqli_fetch_assoc($cquery)):
?>
<?php
$parent_id = $parent['id'];
$sql3 = "SELECT * FROM category WHERE parent = 'parent_id'";
$squery= $con->query($sql3);
?>
<div class="menu-title">
<?php
echo $child ['category'];
?>
</div>
<?php
endwhile;
?>
<div class="widget-html">
<div class="widget-inner">
<ul>
<?php
while($child = mysqli_fetch_assoc($squery)):
?>
<li class="first">
<a href="grid.html">
<span>
<?php
echo $child ['category'];
?>
</span>
</a>
</li>
<?php
endwhile;
?>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<?php
endwhile;
?>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>发布于 2016-09-15 17:37:39
你可以使用这个解决方案:
function makeTree($data = [], $key = 'id', $parent_key = 'parent_id', $node_name = 'childs', $parent_code = 0) {
$parent_ids = array_column($data, $parent_key);
$result = [];
foreach ($data as $k=>$v) {
if($v[$parent_key] == $parent_code){
$result[$v[$key]] = $v;
if(in_array($v[$key], $parent_ids)){
result[$v[$key]][$node_name] = makeTree($data, $key , $parent_key, $node_name, $v[$key]);
}
}
}
return $result;
}示例:
$data =[['id'=>1, 'parent_id'=>0,'name'=>'first'],
['id'=>2, 'parent_id'=>0,'name'=>'second'],
['id'=>3, 'parent_id'=>1,'name'=>'third'],
['id'=>4, 'parent_id'=>3,'name'=>'four'],
['id'=>5, 'parent_id'=>2,'name'=>'five'],
['id'=>7, 'parent_id'=>9,'name'=>'five'],
['id'=>8, 'parent_id'=>2,'name'=>'five'],
['id'=>9, 'parent_id'=>2,'name'=>'five'],
['id'=>10, 'parent_id'=>9,'name'=>'five'],
['id'=>6, 'parent_id'=>1,'name'=>'six']];
$result = makeTree($data, 'id', 'parent_id', 'sub', 0);Run Example
发布于 2016-09-22 08:57:57
是啊..对于我来说,仅仅使用一个表很难创建关系……因此,我又添加了两个表。每个级别一个,并创建关系。它完全解决了我的问题。不管怎样,谢谢你..如果有人对代码感兴趣的话..我很乐意与大家分享..只是评论
发布于 2016-09-22 09:44:56
<div class="col-md-12 col-sm-12"> <a class="logo" title="" href="index.html" style="margin-top:5px"><img alt="" src="images/logo.png"></a> </div>
<div class="col-md-12 col-sm-12"><div class="-dropdown-wrapper">
<a class="dropdown-trigger" href="#0">Categories</a>
<nav class="dropdown">
<h2>Title</h2>
<a href="#0" class="close">Close</a>
<?php
//parent loop - menu1
$sql = "SELECT * FROM menu1";
$pquery = $con->query($sql);
?>
<ul class="dropdown-content">
<?php
while($parent = mysqli_fetch_assoc($pquery)):
?>
<?php //level 1 menu
$cquery=$con->query("SELECT * FROM menu2 WHERE menu1_id=".$parent['id']);
?>
<li class="has-children">
<a href=""><?=$parent ['category'];
?></a>
<ul class="secondary-dropdown is-hidden" style=" background:url(<?=$parent ['background'];
?>); background-position:bottom right; background-repeat:no-repeat; background-color:#FFF">
<?php
while($level1=$cquery->fetch_array()):?>
<li class="go-back"><a href="#0">Menu</a></li>
<li class="see-all"><a href=""><?='See all'.' '.$parent ['category'];
?></a></li>
<li class="has-children">
<a href=""><?=$level1['category']; ?></a>
<?php
//level 2 menu starts
$squery=$con->query("SELECT * FROM menu3 WHERE menu2_id=".$level1['id']);
?>
<ul class="is-hidden">
<li class="go-back"><a href="#0">Clothing</a></li>
<?php
while($level2=$squery->fetch_array()):?>
<li class="">
<a href="category.php?cat=<?=$level2['id']; ?>"><?=$level2['category']; ?></a>
</li>
<?php endwhile; ?>
</ul>
</li>
<?php endwhile; ?>
</ul> <!-- -secondary-dropdown -->
<?php endwhile; // parent endwhile ?>men1 id类别1鞋类2件衣服
menu2 id menu1_id类别1 1鞋2 2连衣裙3 2裤子
menu3
id menu1_id menu2_id类别
1 1 1鞋带鞋3 3 2纽扣
在格式化表格方面需要帮助..但除此之外,这就是...我还在主菜单类别中添加了背景。
https://stackoverflow.com/questions/39058580
复制相似问题