PHP无限分类的类


Posted in PHP onJanuary 02, 2007
<?php 
/** 
 * @author        YangHuan 
 * @datetime     
 * @version        1.0.0 
 */ 
/** 
 * Short description. 
 * 
 * Detail description 
 * @author        
 * @version      1.0 
 * @copyright     
 * @access       public 
 */ 
class Tree 
{ 
    /** 
     * Description 
     * @var        
     * @since     1.0 
     * @access    private 
     */ 
    var $data    = array(); 
    /** 
     * Description 
     * @var        
     * @since     1.0 
     * @access    private 
     */ 
    var $child    = array(-1=>array()); 
    /** 
     * Description 
     * @var        
     * @since     1.0 
     * @access    private 
     */ 
    var $layer    = array(-1=>-1); 
    /** 
     * Description 
     * @var        
     * @since     1.0 
     * @access    private 
     */ 
    var $parent    = array(); 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function Tree ($value) 
    { 
        $this->setNode(0, -1, $value); 
    } // end func 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    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 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none  
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getList (&$tree, $root= 0) 
    { 
        foreach ($this->child[$root] as $key=>$id) 
        { 
            $tree[] = $id; 
            if ($this->child[$id]) $this->getList($tree, $id); 
        } 
    } // end func 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getValue ($id) 
    { 
        return $this->data[$id]; 
    } // end func 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getLayer ($id, $space = false) 
    { 
        return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id]; 
    } // end func 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getParent ($id) 
    { 
        return $this->parent[$id]; 
    } // end func 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getParents ($id) 
    { 
        while ($this->parent[$id] != -1) 
        { 
            $id = $parent[$this->layer[$id]] = $this->parent[$id]; 
        } 
        ksort($parent); 
        reset($parent); 
        return $parent; 
    } // end func 
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getChild ($id) 
    { 
        return $this->child[$id]; 
    } // end func 
     
    /** 
     * Short description.  
     * 
     * Detail description 
     * @param      none 
     * @global     none 
     * @since      1.0 
     * @access     private 
     * @return     void 
     * @update     date time 
    */ 
    function getChilds ($id = 0) 
    { 
        $child = array($id); 
        $this->getList($child, $id); 
        return $child; 
    } // end func 
} // end class 
?>

使用方法

PHP代码:

<?php
//new Tree(根目录的名字); 
//根目录的ID自动分配为0 
$Tree = new Tree('根目录'); 
//setNode(目录ID,上级ID,目录名字); 
$Tree->setNode(1, 0, '目录1'); 
$Tree->setNode(2, 0, '目录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无限分类-PHP100代码

<?php 
//无限分类,从子类找所有父类
//$id 子类ID
 function php100_xd($id){
   $sql="select * from fl where id='$id'";
   $q=mysql_query($sql);
   $rs=mysql_fetch_array($q);
   $rs['fid']==0 ? "" : fl($rs['fid']);
   echo $rs['name']."-";
   }//读取所有父类下面的子类
//$f顶级分类从什么开始,$s样式
 function php100_dx($f=0,$s=""){
   $sql="select * from fl where fid=$f";
   $q=mysql_query($sql);
   $s=$s."-";
   while($rs=mysql_fetch_array($q)){
     echo "<br>$s".$rs['name'];
  flt($rs['id'],$s);
     } 
   }
PHP 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
php数组查找函数总结
Nov 18 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php你的验证码安全码?
Jan 02 #PHP
一个PHP操作Access类(PHP+ODBC+Access)
Jan 02 #PHP
一个用php实现的获取URL信息的类
Jan 02 #PHP
PHP 和 MySQL 开发的 8 个技巧
Jan 02 #PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 #PHP
Ajax PHP分页演示
Jan 02 #PHP
windows下PHP APACHE MYSQ完整配置
Jan 02 #PHP
You might like
php URL跳转代码 减少外链
2011/06/25 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python如何制作缩略图
2019/04/30 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
sort命令的作用和用法
2013/08/25 面试题
会计实习生工作总结的自我评价
2013/10/07 职场文书
2013年保送生自荐信格式
2013/11/20 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
微型企业创业投资计划书
2014/01/10 职场文书
质量负责人任命书
2014/06/06 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
2014公司年终工作总结
2014/12/19 职场文书
客房服务员岗位职责
2015/02/09 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript