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运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
Python探索之Metaclass初步了解
2017/10/28 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
python K近邻算法的kd树实现
2018/09/06 Python
详解Python 函数如何重载?
2019/04/23 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
前处理班长职位说明书
2014/03/01 职场文书
驻村工作简报
2015/07/20 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS