php - MySQL DB 驱动的菜单生成器函数

标签 php mysql function recursion navigation

最近我写了一个递归的PHP函数,它可以像这样基于父子结构生成网站导航

<ul>
  <li>parent
     <li>child</li>
  </li>
</ul>

代码看起来像这样

function generateMenu($parent, $level, $db){
  $q = $db->query("select id, name FROM menu WHERE parent = '$parent'");

  if($level > 0 && $q->num_rows > 0) echo "\n<ul>\n";

   while($row=$q->fetch_object()){
      echo "<li>";
      echo '<a href="?page=' .$page. '">' . $row->name . '</a>';
      //display this level's children
      generateMenu($row->id, $level++, $menu, $db);
      echo "</li>\n\n";
    }

    if($level > 0 &&  $q->num_rows > 0) echo "</ul>\n";
}

上面的这段代码简单地回应了<ul><li>。来自 db 表的结构(如上面的示例)。

现在的问题是,如何创建像本网站那样的导航菜单?

请查看左侧边栏。

http://www.smithsdetection.com/continuous_vapour_sampling.php

现在我认为:

  1. 首先我们需要回应所有家长
  2. 函数必须获取当前页面 ID 作为输入值(例如 $current)
  3. 功能必须回显到“当前页面级别”

我不知道如何修改我的函数,以获得与给定网站一样的输出。请帮忙。

顺便说一下

我的数据库表看起来像那样

enter image description here

注意请不要发布有关 sql 注入(inject)漏洞的答案,我已经注意了它们:检查 in_array(如果变量列在列名数组中)并通过 real_escape。

最佳答案

看看这个:http://www.ferdychristant.com/blog/archive/DOMM-7QJPM7

您应该尝试使用一个查询获取整个层次结构以解决性能问题。

关于php - MySQL DB 驱动的菜单生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7687110/

相关文章:

perl - 如何导出Perl程序包中的所有子程序?

python - python中的条件矩阵运算

javascript - 如何在参数之类的函数中使用函数调用者变量?

php - 论坛不显示 'all' 结果

php - 英语和澳大利亚邮政编码的正则表达式

php - 修改查询以获取请求的值

PHP 从一种表单更新数据库上的不同字段

php - Laravel 5.2 时间戳

php - 寻求一种有效的方法来查找哪些行已受到 mysql 更新操作的影响

android - Caused by : android. database.sqlite.SQLiteException: 表已存在