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 模拟$_PUT实现代码
Mar 15 PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 PHP
关于svn冲突的解决方法
Jun 21 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
php制作的简单验证码识别代码
Jan 26 PHP
PHP消息队列用法实例分析
Feb 12 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
PHP实现页面静态化深入讲解
Mar 04 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
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
js Form.elements[i]的使用实例
2011/11/13 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python_LDA实现方法详解
2017/10/25 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
高中生自我评语大全
2014/01/19 职场文书
《中华少年》教学反思
2014/02/15 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
2015年采购部工作总结
2015/04/23 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js