一个简单的PHP生成树形菜单的代码,使用的是PHP递归的方法,这也是夏日博客刚刚接手的一个项目中一项较为复杂的应用,PHP生成树形菜单只是一个小的片段代码,而和juqery结合就较为麻烦了说,好了,先简单说一下数组库中的结构,其pid为顶级ID,parent为子分类,而parent则是对应pid的,看到这里经常玩PHP或者数据库的应该明白了吧,就是一个递归出来的树形菜单。
从网上找了许多代码,都用不了,也有可能跟自己的数据库有关系吧,还好从51CTO上面找了怎么一段简短的代码,还不错的说。
<?php
header("Content-type:text/html; charset=UTF-8");
$mixTree = array();
/*
* 每个结果中的重点数据两个一个是id一个是指向其父结点id的parent
*/
$mixTree[] = array('id'=>0,'val'=>'顶级菜单1','parent'=>-1);
$mixTree[] = array('id'=>1,'val'=>'顶级菜单2','parent'=>-1);
$mixTree[] = array('id'=>2,'val'=>'顶级菜单1下的二级菜单1','parent'=>0);
$mixTree[] = array('id'=>3,'val'=>'顶级菜单1下的二级菜单2','parent'=>0);
$mixTree[] = array('id'=>4,'val'=>'顶级菜单2下的二级菜单1','parent'=>1);
$mixTree[] = array('id'=>5,'val'=>'顶级菜单1下的二级菜单2下的三级菜单1','parent'=>3);
/*
* 通过二维数组把上面的数据挂载成树
*/
$treeDatas = array();
foreach($mixTree as $nodeDatas){
if($nodeDatas['parent']==-1){
$treeDatas[-1][]=$nodeDatas;
}else{
$treeDatas[$nodeDatas['parent']][]=$nodeDatas;
}
}
/*
* 遍历打印其父结点及其子结点
*/
function traverSesing($nodeDatas,$treeDatas){
echo $nodeDatas['val'];
if(!emptyempty($treeDatas[$nodeDatas['id']])&& is_array($treeDatas[$nodeDatas['id']])){
echo '<ul>';
foreach($treeDatas[$nodeDatas['id']] as $childNodeDatas){
echo '<li>';
traverSesing($childNodeDatas, $treeDatas);
echo '</li>';
}
echo '</ul>';
}
}
echo '<ul>';//www.yixao.com
foreach($treeDatas[-1] as $nodeDatas){
echo '<li>';
traverSesing($nodeDatas, $treeDatas);
echo '</li>';
}
echo '</ul>';
?>
只是这段原生的代码对于数据库上面的优化不是很好,我们可以给个条件或者直接使用 unset 来释放内存来进行优化,我这里因为是一个简单的输出树形菜单片段,一共有六级,所以直接就判断了六层的输出,PHP生成菜单树形效果如下:
这里小小的说明一下,PHP递规菜单树的代码网上有许多,我这里找的只是适合自己的数据库结构而已,大家可以从网上找适合自己的片段代码,如果是多级菜单输出的话,建议使用 unset 来进行内存的优化,另外,如果使用的是 thinkphp 的话,其官网有不少的PHP菜单树代码片段。
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/1303.html