在網上發現的一個無限分類的實現 Class ..
貼在這方便自己以後使用吧..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| <?
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 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 getNodeLever($id) { $parents=array(); if (array_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]; } }
?>
|