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的FTP学习(三)
Oct 09 PHP
动态生成gif格式的图像要注意?
Oct 09 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
php继承的一个应用
Sep 06 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
php猜单词游戏
Sep 29 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
PHP重置数组为连续数字索引的几种方式总结
Mar 12 PHP
PHP切割汉字的常用方法实例总结
Apr 27 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python实现的简单万年历例子分享
2014/04/25 Python
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
python文件与目录操作实例详解
2016/02/22 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python正则表达式如何匹配中文
2020/05/27 Python
文员个人求职自荐信
2013/09/21 职场文书
2014升学宴答谢词
2014/01/26 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
酒店开业主持词
2015/07/02 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js