PHP无限分类的类

PHP代码:--------------------------------------------------------------------------------


<?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代码:--------------------------------------------------------------------------------


<?

//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代码:--------------------------------------------------------------------------------
根目录
|-目录1
|-目录2
|-|-目录2.1
|-|-目录2.2
|-|-目录2.3
|-目录3
|-|-目录3.1
|-|-目录3.2
|-|-目录3.3
|-|-|-目录3.3.1
|-|-|-目录3.3.2
|-|-|-目录3.3.3

如果您觉得我的文章有帮助,请随意赞赏!

*发表评论

用QQ账号登录  请登录后发表评论