A-A+

PHP怎样生成树形菜单

2017年03月13日 PHP技术文章 评论 2 条 阅读 3 views 次

一个简单的PHP生成树形菜单的代码,使用的是PHP递归的方法,这也是夏日博客刚刚接手的一个项目中一项较为复杂的应用,PHP生成树形菜单只是一个小的片段代码,而和juqery结合就较为麻烦了说,好了,先简单说一下数组库中的结构,其pid为顶级ID,parent为子分类,而parent则是对应pid的,看到这里经常玩PHP或者数据库的应该明白了吧,就是一个递归出来的树形菜单。

从网上找了许多代码,都用不了,也有可能跟自己的数据库有关系吧,还好从51CTO上面找了怎么一段简短的代码,还不错的说。

  1. <?php  
  2. header("Content-type:text/html; charset=UTF-8");   
  3. $mixTree = array();  
  4. /* 
  5.  * 每个结果中的重点数据两个一个是id一个是指向其父结点id的parent 
  6.  */  
  7. $mixTree[] = array('id'=>0,'val'=>'顶级菜单1','parent'=>-1);  
  8. $mixTree[] = array('id'=>1,'val'=>'顶级菜单2','parent'=>-1);  
  9. $mixTree[] = array('id'=>2,'val'=>'顶级菜单1下的二级菜单1','parent'=>0);  
  10. $mixTree[] = array('id'=>3,'val'=>'顶级菜单1下的二级菜单2','parent'=>0);  
  11. $mixTree[] = array('id'=>4,'val'=>'顶级菜单2下的二级菜单1','parent'=>1);  
  12. $mixTree[] = array('id'=>5,'val'=>'顶级菜单1下的二级菜单2下的三级菜单1','parent'=>3);  
  13.    
  14. /* 
  15.  * 通过二维数组把上面的数据挂载成树 
  16.  */  
  17. $treeDatas = array();  
  18. foreach($mixTree as $nodeDatas){  
  19.     if($nodeDatas['parent']==-1){  
  20.         $treeDatas[-1][]=$nodeDatas;  
  21.     }else{  
  22.         $treeDatas[$nodeDatas['parent']][]=$nodeDatas;  
  23.     }  
  24. }  
  25.    
  26. /* 
  27.  * 遍历打印其父结点及其子结点 
  28.  */  
  29. function traverSesing($nodeDatas,$treeDatas){  
  30.     echo $nodeDatas['val'];  
  31.     if(!emptyempty($treeDatas[$nodeDatas['id']])&& is_array($treeDatas[$nodeDatas['id']])){  
  32.         echo '<ul>';  
  33.         foreach($treeDatas[$nodeDatas['id']] as $childNodeDatas){  
  34.             echo '<li>';  
  35.             traverSesing($childNodeDatas$treeDatas);  
  36.             echo '</li>';  
  37.         }  
  38.         echo '</ul>';  
  39.     }  
  40.        
  41. }  
  42.  echo '<ul>';//www.xiariboke.net  
  43. foreach($treeDatas[-1] as $nodeDatas){  
  44.     echo '<li>';  
  45.     traverSesing($nodeDatas$treeDatas);  
  46.     echo '</li>';  
  47. }  
  48. echo '</ul>';  

只是这段原生的代码对于数据库上面的优化不是很好,我们可以给个条件或者直接使用 unset 来释放内存来进行优化,我这里因为是一个简单的输出树形菜单片段,一共有六级,所以直接就判断了六层的输出,PHP生成菜单树形效果如下:

这里小小的说明一下,PHP递规菜单树的代码网上有许多,我这里找的只是适合自己的数据库结构而已,大家可以从网上找适合自己的片段代码,如果是多级菜单输出的话,建议使用 unset 来进行内存的优化,另外,如果使用的是 thinkphp 的话,其官网有不少的PHP菜单树代码片段。

标签:

2 条留言  访客:2 条  博主:0 条

  1. 胡德杰

    一直用WP,才不管他怎么形成的呢,呵呵

  2. 读书名言

    学习了

给我留言