// +----------------------------------------------------------------------
// | Tasoo all right resvered
// +----------------------------------------------------------------------
// | 中国微型软件,电子商务系统
// +----------------------------------------------------------------------
// | 作者 Tasoo
// +----------------------------------------------------------------------
// | E-MAIL: Tasoo@163.com
// +----------------------------------------------------------------------
// $Id$
/**
+------------------------------------------------------------------------------
* Tree 实现
+------------------------------------------------------------------------------
* @category Com
* @package Com
* @subpackage Tasoo
* @author Tasoo
* @version $Id$
+------------------------------------------------------------------------------
*/
class Tree
{
protected $data = array();
protected $child = array(-1=>array());
protected $layer = array(-1=>-1);
protected $parent = array();
function __construct ($value)
{
$this->setNode(0, -1, $value);
} // end func
protected 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
protected function getList (&$tree, $root= 0)
{
foreach ($this->child[$root] as $key=>$id)
{
$tree[] = $id;
if ($this->child[$id]) $this->getList($tree, $id);
}
} // end func
protected function getValue ($id)
{
return $this->data[$id];
} // end func
protected function getLayer ($id, $space = false)
{
return $space?str_repeat($space, $this->layer[$id])this->layer[$id];
} // end func
protected function getParent ($id)
{
return $this->parent[$id];
} // end func
protected function getParents ($id)
{
while ($this->parent[$id] != -1)
{
$id = $parent[$this->layer[$id]] = $this->parent[$id];
}
ksort($parent);
reset($parent);
return $parent;
} // end func
protected function getChilds ($id = 0)
{
$child = array($id);
$this->getList($child, $id);
return $child;
} // end func
} // end class
?>