tree.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

    
function  unsetTree(){
         
$this -> data = array ();
         
$this -> child = array ( - 1 => array ());
         
$this -> layer = array ( - 1 =>- 1 );
         
$this -> parent = array ();
         }
    
/* *
     * 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

/*
//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(2);

//遍历输出
foreach ($category as $key=>$id)
{
    echo $Tree->getLayer($id, '|-').$Tree->getValue($id)."<br>\n";
}
*/
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值