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的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
PHP测试程序运行时间的类
Feb 05 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 PHP
php计算一个文件大小的方法
Mar 30 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
Laravel日志用法详解
2016/10/09 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
TypeScript类型声明书写详解
2019/08/28 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
python爬取网易云音乐评论
2018/11/16 Python
django session完成状态保持的方法
2018/11/27 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
KTV的创业计划书范文
2014/02/02 职场文书
护理中职生求职信范文
2014/02/24 职场文书
运动会加油口号
2014/06/07 职场文书