php 无限分类的树类代码


Posted in PHP onDecember 03, 2009
<?php 
/** 
by lenush; 
*/ 
class Tree 
{ 
var $data = array(); 
var $child = array(-1=>array()); 
var $layer = array(-1=>-1); 
var $parent = array(); function Tree ($value) 
{ 
$this->setNode(0, -1, $value); 
} // end func 
function setNode ($id, $parent, $value) 
{ 
$parent = $parent?$parent:0; 
$this->data[$id] = $value; 
$this->child[$id] = array(); 
$this->child[$parent][] = $id; 
$this->parent[$id] = $parent; 
if (!isset($this->layer[$parent])) 
{ 
$this->layer[$id] = 0; 
} 
else 
{ 
$this->layer[$id] = $this->layer[$parent] + 1; 
} 
} // end func 
function getList (&$tree, $root= 0) 
{ 
foreach ($this->child[$root] as $key=>$id) 
{ 
$tree[] = $id; 
if ($this->child[$id]) $this->getList($tree, $id); 
} 
} // end func 

function getValue ($id) 
{ 
return $this->data[$id]; 
} // end func 

function getLayer ($id, $space = false) 
{ 
return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id]; 
} // end func 
function getParent ($id) 
{ 
return $this->parent[$id]; 
} // end func 
function getParents ($id) 
{ 
while ($this->parent[$id] != -1) 
{ 
$id = $parent[$this->layer[$id]] = $this->parent[$id]; 
} 
ksort($parent); 
reset($parent); 
return $parent; 
} // end func 
function getChild ($id) 
{ 
return $this->child[$id]; 
} // end func 
function getChilds ($id = 0) 
{ 
$child = array($id); 
$this->getList($child, $id); 
return $child; 
} // end func 
} // end class 

//new Tree(根目录的名字); 
//根目录的ID自动分配为0 
$Tree = new Tree('目录导航'); 
//setNode(目录ID,上级ID,目录名字); 
$Tree->setNode(1, 0, '目录1'); 
$Tree->setNode(2, 1, '目录2'); 
$Tree->setNode(3, 0, '目录3'); 
$Tree->setNode(4, 3, '目录3.1'); 
$Tree->setNode(5, 3, '目录3.2'); 
$Tree->setNode(6, 3, '目录3.3'); 
$Tree->setNode(7, 2, '目录2.1'); 
$Tree->setNode(8, 2, '目录2.2'); 
$Tree->setNode(9, 2, '目录2.3'); 
$Tree->setNode(10, 6, '目录3.3.1'); 
$Tree->setNode(11, 6, '目录3.3.2'); 
$Tree->setNode(12, 6, '目录3.3.3'); 
//getChilds(指定目录ID); 
//取得指定目录下级目录.如果没有指定目录就由根目录开始 
$category = $Tree->getChilds(); 
//遍历输出 
foreach ($category as $key=>$id) 
{ 
echo $Tree->getLayer($id, '|-').$Tree->getValue($id)."<br />\n"; 
} 
?>
PHP 相关文章推荐
php摘要生成函数(无乱码)
Feb 04 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
php设置页面超时时间解决方法
Sep 22 PHP
php如何实现只替换一次或N次
Oct 29 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
PHP钩子实现方法解析
May 21 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
php zip文件解压类代码
Dec 02 #PHP
PHP5 面向对象(学习记录)
Dec 02 #PHP
php smarty模版引擎中的缓存应用
Dec 02 #PHP
php 一元分词算法
Nov 30 #PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 #PHP
php读取html并截取字符串的简单代码
Nov 30 #PHP
php 获取客户端的真实ip
Nov 30 #PHP
You might like
文章推荐系统(三)
2006/10/09 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
python基础教程之元组操作使用详解
2014/03/25 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python3.x实现发送邮件功能
2018/05/22 Python
python logging日志模块原理及操作解析
2019/10/12 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
基于python监控程序是否关闭
2020/01/14 Python
如何教少儿学习Python编程
2020/07/10 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
承诺书怎么写
2014/03/26 职场文书
电工技术比武方案
2014/05/11 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书