@author Kvoid
@copyright http://kvoid.com
@version 1.0
@access public
@example
¥tree= new Tree(¥result);
¥arr=¥tree->leaf(0);
¥nav=¥tree->navi(15);/
classTree {private ¥result;private ¥tmp;private ¥arr;private ¥already = array();/机关函数
@param array ¥result 树型数据表成果集
@param array ¥fields 树型数据表字段,array(分类id,父id)
@param integer ¥root 分类的父id/
public function __construct(¥result, ¥fields = array(id, pid), ¥root = 0) {¥this->result = ¥result;¥this->fields = ¥fields;¥this->root = ¥root;¥this->handler();
}/树型数据表成果集处理惩罚/
private functionhandler() {foreach (¥this->result as ¥node) {¥tmp[¥node[¥this->fields[1]]][] = ¥node;
}krsort(¥tmp);for (¥i = count(¥tmp); ¥i > 0; ¥i--) {foreach (¥tmp as ¥k => ¥v) {if (!in_array(¥k, ¥this->already)) {if (!¥this->tmp) {¥this->tmp = array(¥k, ¥v);¥this->already[] = ¥k;continue;
}else{foreach (¥v as ¥key => ¥value) {if (¥value[¥this->fields[0]] == ¥this->tmp[0]) {¥tmp[¥k][¥key][child] = ¥this->tmp[1];¥this->tmp = array(¥k, ¥tmp[¥k]);
}
}
}
}
}¥this->tmp = null;
}¥this->tmp = ¥tmp;
}/反向递归/
private function recur_n(¥arr, ¥id) {foreach (¥arr as ¥v) {if (¥v[¥this->fields[0]] == ¥id) {¥this->arr[] = ¥v;if (¥v[¥this->fields[1]] != ¥this->root) ¥this->recur_n(¥arr, ¥v[¥this->fields[1]]);
}
}
}/正向递归/
private function recur_p(¥arr) {foreach (¥arr as ¥v) {¥this->arr[] = ¥v[¥this->fields[0]];if (¥v[child]) ¥this->recur_p(¥v[child]);
}
}/菜单 数组
@param integer ¥id 分类id
@return array 返回分支,默认返回全部树/
public function leaf(¥id = null) {¥id = (¥id == null) ? ¥this->root : ¥id;return ¥this->tmp[¥id];
}/导航 一维数组
@param integer ¥id 分类id
@return array 返回单线分类直到分类/
public function navi(¥id) {¥this->arr = null;¥this->recur_n(¥this->result, ¥id);krsort(¥this->arr);return ¥this->arr;
}/散落 一维数组
@param integer ¥id 分类id
@return array 返回leaf下所有分类id/
public function leafid(¥id) {¥this->arr = null;¥this->arr[] = ¥id;¥this->recur_p(¥this->leaf(¥id));return ¥this->arr;
}
}?>