我想做一个导航菜单与子菜单悬停。我想从我的数据库中获取这些数据(以便在数据库中的数据更改菜单栏时使其成为动态的)。在我的数据库中,有一个表包含以下字段:
IDNameLevelParent_idLevel可以是010对于主菜单1对于子菜单,主菜单的id绑定到parent_id字段。
例如:

ID  Name           Level   Parent_id
1   Test           0
2   Test2          0
3   Test_sub       1        1
4   Test_sub2      2        2

我已经设法从数据库中获取主菜单项,但现在我有点卡住了。这是我的代码任何帮助都会被告知。
<?php
$q2= "SELECT * from menu where level = 0 ";
$q2result = $db->query($q2);
while($a2 = $q2result->fetch(PDO::FETCH_ASSOC)){
    echo "
 <ul>
    <li><a href='#' ><span> " . $a2['name'] . "  </span></a>
    <ul>
        <li><a href='#' ><span> test </span></a></li>
    </ul>
</ul>
";
}
?>

最佳答案

首先将所有数据加载到变量中。在SQL语句中从不打印/回显。

 <?php
  $q2= "SELECT * FROM menu ORDER BY Level ASC";
  $q2result = $db->query($q2);
  $nodes=array();
  while($a2 = $q2result->fetch(PDO::FETCH_ASSOC)){
    // assuming one parent node has already been assigned, due do level order into the SQL
    if($node['Level']>0 && isset($nodes[$a2['id']])) {
      $nodes[$a2['id']]['nodes'][]=$a2;
    } else {
      // parent node
      $nodes[$a2['id']]=$a2;
      $nodes[$a2['id']]['nodes']=array();
    }

  }

  print "<ul>";
  foreach($nodes as $node) {
    print "<li>";
      print "<a href='#'>".$node['Name']."</a>";
      if(sizeof($node['nodes'])>0) {
        print "<ul>";
        foreach($node['nodes'] as $subnode) {
          print "<li><a href='#'>".$subnode['Name']."</a></li>";
        }
        print "</ul>";
      }
    print "</li>";
  }
  print "</ul>";
?>

这可能会有更大的改进,但是有了这个,你可以做你想做的,并改进它。

关于php - 从数据库下拉菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37491865/

10-14 17:51
查看更多