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 相关文章推荐
BBS(php &amp; mysql)完整版(六)
Oct 09 PHP
php 日期时间处理函数小结
Dec 18 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
PHP 中常量的知识整理
Apr 14 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
docker-compose部署php项目实例详解
Jul 30 PHP
php实现映射操作实例详解
Oct 02 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
js定时器实例分享
2016/12/20 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
Django如何实现内容缓存示例详解
2017/09/24 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
浅谈Python协程
2020/06/17 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
建筑工程技术应届生自荐信
2013/09/27 职场文书
应用数学自荐书范文
2013/11/24 职场文书
总经理秘书工作职责
2013/12/26 职场文书
商务助理求职信范文
2014/04/20 职场文书
小区文明倡议书
2014/05/16 职场文书
颐和园导游词400字
2015/01/30 职场文书
人与自然的观后感
2015/06/18 职场文书
开学第一天的感想
2015/08/10 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers