PHP无限分类的类

 更新时间:2007年01月02日 00:00:00   作者:  
这段时间在写一个部门权限系统,需要用到无限分类技术,找了很多关于分类的代码.逐个收藏起来

复制代码 代码如下:

<?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类的反射用法实例

    这篇文章主要介绍了PHP类的反射用法,实例讲述了反射类的常用操作,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • Laravel中正确地返回HTTP状态码方法示例

    Laravel中正确地返回HTTP状态码方法示例

    这篇文章主要给大家介绍了如何在Laravel中正确地返回HTTP状态码的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • PHP+Ajax实现无刷新分页实例详解(附demo源码下载)

    PHP+Ajax实现无刷新分页实例详解(附demo源码下载)

    这篇文章主要介绍了PHP+Ajax实现无刷新分页的方法,以完整实例形式详细分析了PHP结合ajax实现无刷新分页的具体步骤与相关技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2016-04-04
  • PHP之sprintf函数用法详解

    PHP之sprintf函数用法详解

    这篇文章主要介绍了PHP中sprintf函数用法,以实例形式详细分析了sprintf函数格式化输出的常见用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 隐藏你的.php文件的实现方法

    隐藏你的.php文件的实现方法

    隐藏你的.php文件的实现方法...
    2007-03-03
  • php中ob_get_length缓冲与获取缓冲长度实例

    php中ob_get_length缓冲与获取缓冲长度实例

    这篇文章主要介绍了php中ob_get_length缓冲与获取缓冲长度的方法,实例分析了缓冲输出的用法与相关技巧,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • PHP中$_SERVER使用说明

    PHP中$_SERVER使用说明

    这篇文章主要介绍了PHP中$_SERVER使用说明的相关资料,需要的朋友可以参考下
    2015-07-07
  • hadoop常见错误以及处理方法详解

    hadoop常见错误以及处理方法详解

    本篇文章是对hadoop常见错误以及处理方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php显示指定目录下子目录的方法

    php显示指定目录下子目录的方法

    这篇文章主要介绍了php显示指定目录下子目录的方法,涉及php操作目录的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP中常用的魔术方法

    PHP中常用的魔术方法

    本篇文章主要介绍了PHP中常用的魔术方法的相关资料。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04

最新评论