php+mysql实现无限分类实例详解
fenlei($arr[$i][0]); //$arr[$i][1]表示第$i+1个分类的id的值。进行递归,也就是把自己的id作为f_id参数把自己的子类再循环出来。
}
}
}
?>
三个字段id,parentid,name,算法也很简单递归,以前用递归的时候很傻,应该说极傻,因为在递归中通过查询数据表来获得子类的所有,最近开窍了,想到了一个地球人都能想得到的方法,下面是代码,一个class,代码如下:
复制代码 代码如下:
class Tree {
/**
* 从数据库查询出的所有分类信息
* @var array
*/
var $arr;
/**
* 如下格式
* var $arr = array(
1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
);*/
/**
* 输出结构
* @var array
*/
var $tree = array();
/**
* 树形递归的深度
* @var int
*/
var $deep = 1;
/**
* 生成树形的修饰符号
* @var array
*/
var $icon = array('│','├','└');
/**
* 生成指定id的下级树形结构
* @param int $rootid 要获取树形结构的id
* @param string $add 递归中使用的前缀
* @param bool $parent_end 标识上级分类是否是最后一个
*/
function getTree($rootid = 0,$add = ”,$parent_end =true){
$is_top = 1;
$child_arr = $this->getChild($rootid);
if(is_array($child_arr)){
$cnt = count($child_arr);
foreach($child_arr as $key => $child){
$cid = $child['id'];
$child_child = $this->getChild($cid);
if($this->deep >1){
if($is_top == 1 && $this->deep > 1){
$space = $this->icon[1];
if(!$parent_end)
$add .= $this->icon[0];
else $add .= ' ';
}
if($is_top == $cnt){
$space = $this->icon[2];
$parent_end = true;
}else {
$space = $this->icon[1];