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 addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
四个PHP非常实用的功能
Sep 29 PHP
php常用图片处理类
Mar 16 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
在laravel中使用with实现动态添加where条件
Oct 10 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 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
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
网页常用特效代码整理
2006/06/23 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python中字符串的常见操作技巧总结
2016/07/28 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
python设置中文界面实例方法
2020/10/27 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
个人学习总结范文
2015/02/15 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL