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 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
一个php导出oracle库的php代码
Apr 20 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
php计算一个文件大小的方法
Mar 30 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
php ajax数据传输和响应方法
Aug 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
如何使用PHP计算上一个月的今天
2013/05/23 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
php命令行写shell实例详解
2018/07/19 PHP
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
汽车销售求职自荐信
2013/10/01 职场文书
自荐信的两点禁忌
2013/10/30 职场文书
编辑找工作求职信范文
2013/12/16 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
开工典礼策划方案
2014/05/23 职场文书
2015高考寄语集锦
2015/02/27 职场文书
大学团日活动总结书
2015/05/11 职场文书
起诉状范本
2015/05/20 职场文书
早会开场白台词大全
2015/06/01 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS