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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP新手NOTICE错误常见解决方法
Dec 07 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
PHP中将网页导出为Word文档的代码
May 25 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
php中时间函数date及常用的时间计算
May 12 PHP
PHP常见的几种攻击方式实例小结
Apr 29 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中的加密功能
2006/10/09 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php之可变变量的实例详解
2017/09/12 PHP
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
JavaScript实现答题评分功能页面
2020/06/24 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
Python字符串替换实例分析
2015/05/11 Python
python监控文件或目录变化
2016/06/07 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
奥巴马上海演讲稿
2014/09/10 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
个人收入证明范本
2015/06/12 职场文书
小学语文教学反思范文
2016/03/03 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang