class
Tree
{
public
$data
=
array
();
public
$cateArray
=
array
();
function
Tree()
{
}
function
setNode (
$id
,
$parent
,
$value
)
{
$parent
=
$parent
?
$parent
:0;
$this
->data[
$id
] =
$value
;
$this
->cateArray[
$id
] =
$parent
;
}
function
getChildsTree(
$id
=0)
{
$childs
=
array
();
foreach
(
$this
->cateArray
as
$child
=>
$parent
)
{
if
(
$parent
==
$id
)
{
$childs
[
$child
]=
$this
->getChildsTree(
$child
);
}
}
return
$childs
;
}
function
getParentsTree(
$id
=0)
{
$parents
=
array
();
foreach
(
$this
->cateArray
as
$child
=>
$parent
)
{
if
(
$child
==
$id
)
{
$parents
[
$parent
]=
$this
->getParentsTree(
$parent
);
}
}
return
$parents
;
}
function
getChilds(
$id
=0)
{
$childArray
=
array
();
$childs
=
$this
->getChild(
$id
);
foreach
(
$childs
as
$child
)
{
$childArray
[]=
$child
;
$childArray
=
array_merge
(
$childArray
,
$this
->getChilds(
$child
));
}
return
$childArray
;
}
function
getChild(
$id
)
{
$childs
=
array
();
foreach
(
$this
->cateArray
as
$child
=>
$parent
)
{
if
(
$parent
==
$id
)
{
$childs
[
$child
]=
$child
;
}
}
return
$childs
;
}
function
getParents(
$id
)
{
$parentArray
=
array
();
$parents
=
$this
->getParent(
$id
);
foreach
(
$parents
as
$parent
)
{
$parentArray
[]=
$parent
;
$parentArray
=
array_merge
(
$parentArray
,
$this
->getParents(
$parent
));
}
return
$parentArray
;
}
function
getParent(
$id
)
{
$parents
=
array
();
foreach
(
$this
->cateArray
as
$child
=>
$parent
)
{
if
(
$child
==
$id
)
{
$parents
[
$parent
]=
$parent
;
}
}
return
$parents
;
}
//单线获取父节点
function
getNodeLever(
$id
)
{
$parents
=
array
();
if
(key_exists(
$this
->cateArray[
$id
],
$this
->cateArray))
{
$parents
[]=
$this
->cateArray[
$id
];
$parents
=
array_merge
(
$parents
,
$this
->getNodeLever(
$this
->cateArray[
$id
]));
}
return
$parents
;
}
function
getLayer(
$id
,
$preStr
=
'|-'
)
{
return
str_repeat
(
$preStr
,
count
(
$this
->getNodeLever(
$id
)));
}
function
getValue (
$id
)
{
return
$this
->data[
$id
];
}
// end func
}