当前位置: 首页 > 面试题库 >

如何通过PHP和MySQL建立无限级别的菜单

刘令
2023-03-14
问题内容

好吧,要构建我的菜单,我使用了类似这样的数据库结构

  2服务0
  3图片库0
  4首页0
  5反馈0
  6个常见问题0
  7新闻和活动0
  8感言0
 81 FACN 0
 83组织结构81
 84宪法81
 85理事会81
 86 IFAWPCA 81
 87服务81
 88出版物81

要为现有子菜单分配另一个子菜单,我只需将其父ID分配为其父字段的值即可。父级0表示顶级菜单

现在在另一个子菜单中创建子菜单时没有问题

现在这是我获取顶部菜单子菜单的方式

<ul class="topmenu">
    <? $list = $obj -> childmenu($parentid); 
        //this list contains the array of submenu under $parendid
        foreach($list as $menu) {
            extract($menu);
            echo '<li><a href="#">'.$name.'</a></li>';
        }
    ?>
</ul>

我想做的是。

我想检查一个新菜单是否还有其他子菜单

我要继续检查,直到它搜索到所有可用的子菜单为止

我想在其特定列表项中显示其子菜单,如下所示

<ul>       
       <li><a href="#">Home</a>
        <ul class="submenu">
           ........ <!-- Its sub menu -->
           </ul>
       </li>
</ul>

问题答案:

您需要为此使用递归函数。 从技术上讲,有几种方法可以做到,但是递归实际上是这里的最佳选择

这是它如何工作的基本要点:

function drawMenu ($listOfItems) {
    echo "<ul>";
    foreach ($listOfItems as $item) {
        echo "<li>" . $item->name;
        if ($item->hasChildren()) {
            drawMenu($item->getChildren()); // here is the recursion
        }
        echo "</li>";
    }
    echo "</ul>";
}

的属性和方法$item只是示例,我将根据您的需要将其交给您来实现,但是我认为它可以传达信息。



 类似资料:
  • 下面的代码适用于一个if语句,但没有给出另一个if语句的结果,它在第一个查询中显示了'flights'表,但在另一个条件之后,没有显示另一个名为'ISB to Muree'的表。

  • 问题内容: 我正在尝试从我的PHP和MySQL数据库中构建一个不被接受的列表菜单树。 我有一个从数据库返回的页面对象数组。每个页面对象都有parent_id属性,如果没有父对象,则将其设置为null。页面对象如下所示: 如果可能的话,我不想递归地做,只打一次数据库,因为我将在几乎每个请求上构建菜单。我想创建一个函数,将其对象数组传递给它,它将返回html列表。 问题答案: 我喜欢@mario的解决

  • 本文向大家介绍PHP 无限级分类,包括了PHP 无限级分类的使用技巧和注意事项,需要的朋友参考一下 有一段时间没用过无限极分类,不巧今天又用到,所以特地去翻箱回顾以前。为了避免以后找起来麻烦,特地贴在这里。 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 我正在尝试使用JaxWsProxyFactoryBean连接到TLS1。2通过代理使用Spring Boot和java配置的https服务。我找不到任何示例,也找不到有关如何配置的信息。我使用wsdl2java构建最终从JaxWsProxyFactoryBean返回的所有对象。任何帮助都将不胜感激。我目前拥有: 和 我目前收到一个错误: 任何帮助都将不胜感激。 谢谢,布莱恩

  • 本文向大家介绍javascript实现无限级select联动菜单,包括了javascript实现无限级select联动菜单的使用技巧和注意事项,需要的朋友参考一下 代码很简单,这里主要是给大家推荐一下本代码的实现思路,别具一格。 奉上代码:

  • 我正在为Swift使用框架。我试图通过websockets API连接,我有一个方法,它在的中被调用。我已经全局声明了我的manager和socketClient,我将把方法的代码放在下面: 我面临的问题是没有调用回调,因此无法发出ping消息。以下是日志: 2018-02-18 19:02:20.589916+0530股票-蛋糕[10965:3662189]日志SocketManager:添加引