php递归算法 php递归函数无限级分类
本文导语: 运用php递归算法实现的无限极分类: 数据库中,分类表(category)只有一张,里面主要包含字段有:主键ID,分类名name,父级PID,分类路径PATH,这四个字段应该是必须的,再插入一些测试数据,例如表中有如下数据: 首先,path...
运用php递归算法实现的无限极分类:
数据库中,分类表(category)只有一张,里面主要包含字段有:主键ID,分类名name,父级PID,分类路径PATH,这四个字段应该是必须的,再插入一些测试数据,例如表中有如下数据:
首先,path字段,可能有些朋友对这个字段还不太理解,0-1-3其实这个表示是当前分类的所有父类,这样一目了然它的父类是开发语言->php->php函数->然后是当前分类,这样做就能很清楚的知道当前分类的深度,是第几级分类,然后可以根据这个字段值计算分类的缩进,并构造出树形菜单如下:
开发语言
|- php
|- |- php函数
|- |- |-函数urlencode
|- java
|- |- spring
用php写递归函数实现这个Tree菜单,为了方便直接使用thinkphp来演示查询吧。
$pid,
);
//查询
$data=$model->where($map)->select();
//定义新数组 用来存生成的html树形菜单
$html_array=array();
//循环分类
$html='';
$padding=0; //缩进
foreach($data as $k=>$v){
//根据path字段的值实现缩进
$path=$v['path'];
if($path&&strpos($v['path'],'-')){
$path_array=@explode('-',$v['path']);
$count=count($path_array)-1;
$padding=$count*20; //下一级分类缩进20像素
}
//当前分类数据html
$data_array[]='
'.$v['name'].'
';
//递归开始查找下级分类
$data_array[]=toTree($v['id']);//把当前分类的id当做父级Id进行递归
}
//foreach循环结束合并分类html数组
$html.=implode('',$data_array());
$html.='';
//html树形菜单构造完成,就这么简单,so easy吧!
return $html;
}