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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
Yii2框架使用计划任务的方法
May 25 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
Yii框架的布局文件实例分析
Sep 04 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 中的批处理的实现
2007/06/14 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python中xrange用法分析
2015/04/15 Python
python 排序算法总结及实例详解
2016/09/28 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
金山毒霸系列的笔试题
2013/04/13 面试题
财务副总经理工作职责
2013/11/25 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL