随笔 - 1330  文章 - 1  评论 - 378  阅读 - 482万 
复制代码
<?
/**
 * @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[$rootas $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";
}
*/
?>
复制代码
posted on   钱途无梁  阅读(453)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示