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下对数组进行排序的函数
Aug 08 PHP
destoon复制新模块的方法
Jun 21 PHP
php查找字符串出现次数的方法
Dec 01 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
PHP加密技术的简单实现
Sep 04 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
YII框架常用技巧总结
Apr 27 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
Apr 26 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
PHP文件读写操作相关函数总结
2014/11/18 PHP
PHP查询快递信息的方法
2015/03/07 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
php unlink()函数使用教程
2018/07/12 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
一行代码告别document.getElementById
2012/06/01 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
大一新生学期自我评价
2014/04/09 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
企业宗旨标语
2014/06/10 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
写给老师的保证书
2015/05/09 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python