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 相关文章推荐
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
php网页版聊天软件实现代码
Aug 12 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
PHP读取目录树的实现方法分析
Mar 22 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 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模板页面中分页代码的解析
2009/02/06 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
Python实现字典依据value排序
2016/02/24 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python os库常用操作代码汇总
2020/11/03 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
迟到早退检讨书
2014/02/10 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python