一个简单的PHP生成树形菜单的代码,使用的是PHP递归的方法,这也是夏日博客刚刚接手的一个项目中一项较为复杂的应用,PHP生成树形菜单只是一个小的片段代码,而和juqery结合就较为麻烦了说,好了,先简单说一下数组库中的结构,其pid为顶级ID,parent为子分类,而parent则是对应pid的,看到这里经常玩PHP或者数据库的应该明白了吧,就是一个递归出来的树形菜单。,从网上找了许多代码,都用不了,也有可能跟自己的数据库有关系吧,还好从51CTO上面找了怎么一段简短的代码,还不错的说。,只是这段原生的代码对于数据库上面的优化不是很好,我们可以给个条件或者直接使用 unset 来释放内存来进行优化,我这里因为是一个简单的输出树形菜单片段,一共有六级,所以直接就判断了六层的输出,PHP生成菜单树形效果如下:,,这里小小的说明一下,PHP递规菜单树的代码网上有许多,我这里找的只是适合自己的数据库结构而已,大家可以从网上找适合自己的片段代码,如果是多级菜单输出的话,建议使用 unset 来进行内存的优化,另外,如果使用的是 thinkphp 的话,其官网有不少的PHP菜单树代码片段。,

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

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

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

  35.             echo '
  36. ';  
  37.         }  
  38.         echo '';  
  39.     }  
  40.        
  41. }  
  42.  echo '';//www.xiariboke.net  
  43. foreach($treeDatas[-1] as $nodeDatas){  
  44.     echo '';  
  45.     traverSesing($nodeDatas$treeDatas);  

  46.     echo '
  47. ';  
  48. }  
  49. echo '';  

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

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

,

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

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

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

  35.             echo '
  36. ';  
  37.         }  
  38.         echo '';  
  39.     }  
  40.        
  41. }  
  42.  echo '';//www.xiariboke.net  
  43. foreach($treeDatas[-1] as $nodeDatas){  
  44.     echo '';  
  45.     traverSesing($nodeDatas$treeDatas);  

  46.     echo '
  47. ';  
  48. }  
  49. echo '';  

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

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

最后修改:2025 年 09 月 10 日
如果觉得我的文章对你有用,请随意夸赞