dowjgrm6787 2016-08-20 20:49
浏览 148

PHP和MySQL中的三级大型菜单

I have a parent child system. I am trying to create a three-level menu, but the first level menu keeps being repeated in all three levels.

Here is sample data of my database table

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    3

PHP code:

<?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>
  • 写回答

3条回答 默认 最新

  • douwen2072 2016-09-15 09:37
    关注

    You may make it with this solution:

    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;
    }
    

    Example:

    $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

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?