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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
php在数组中查找指定值的方法
Mar 17 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
Smarty模板语法详解
Jul 20 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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文件上传表单摘自drupal的代码
2011/02/15 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
一行python实现树形结构的方法
2019/08/09 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
毕业生的自我评价
2013/12/30 职场文书
教师个人自我评价范文
2014/04/13 职场文书
旷课检讨书500字
2014/10/14 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
Python实现简单的猜单词
2021/06/15 Python
python编程项目中线上问题排查与解决
2021/11/01 Python
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers