簡單的 PHP 無限分類


在網上發現的一個無限分類的實現 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
<?
/**
* 作者 : askie
* 版權 : 随便用
* 無限分類
*/
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];
}
}

/*
$Tree = new Tree("請選擇分類");

//setNode(目錄 ID, 上級 ID, 目錄名字);
$Tree->setNode(1, 0, '目錄1');
$Tree->setNode(2, 1, '目錄2');
$Tree->setNode(5, 3, '目錄5');
$Tree->setNode(3, 0, '目錄3');
$Tree->setNode(4, 2, '目錄4');
$Tree->setNode(9, 4, '目錄9');
$Tree->setNode(6, 2, '目錄6');
$Tree->setNode(7, 2, '目錄7');
$Tree->setNode(8, 3, '目錄8');

//print_r($Tree->getChildsTree(0));
//print_r($Tree->getChild(0));
//print_r($Tree->getLayer(2));

$category = $Tree->getChilds();

// 迴圈輸出
foreach ($category as $key => $id)
{
echo $id.$Tree->getLayer($id, '|-').$Tree->getValue($id)."\n";
}
*/
?>