将数据库取的分类数据格式化,如:
新闻
--体育新闻
--娱乐新闻
财经
--外汇
--金融
initialize($original,$id,$parentid); } } /** * 初始化 +------------------------------------------ * @access public +------------------------------------------ * @param array $original 原始数据 * @param string $id id的键名 * @param string $parentid 父id的键名 +------------------------------------------ * @return void */ public function initialize($original,$id,$parentid) { $this->original = $original; $this->id = $id; $this->parentid = $parentid; } /** * 获取初始节点 +---------------------------------------------- * @access protected +---------------------------------------------- * @param int $parentid 初始节点的级别 +---------------------------------------------- * @return array $parenttree */ protected function getparenttree($parentid) { $parenttree = array(); foreach($this->original as $key=>$value) { if($value[$this->parentid] == $parentid) { array_push($parenttree,$value); } } return $parenttree; } /** * 获取子树 +---------------------------------------------- * @access protected +---------------------------------------------- * @param int $id 节点的id * @param string $leveltag 缩进标记 +---------------------------------------------- * @return void */ protected function getchildrentree($id,$leveltag) { foreach($this->original as $key=>$value) { if($id == $value[$this->parentid]) { if($leveltag) { $this->getlevel($value[$this->parentid]); $value['leveltag'] = str_repeat($leveltag,$this->thislevel); $this->thislevel = 0; } $this->tree[] = $value; $this->getchildrentree($value[$this->id],$leveltag); } } } /** * 获取节点的级别 +------------------------------------------------- * @access protected +------------------------------------------------- * @param int $parentid 节点的父id +------------------------------------------------- * @return void */ protected function getlevel($parentid) { foreach($this->original as $key=>$value) { if($parentid == $value[$this->id] && $parentid != $this->initid) { $this->thislevel++; $this->getlevel($value[$this->parentid]); } } } /** * 获取完整的树 +------------------------------------------------- * @access public +------------------------------------------------- * @param int $level 从什么级别开始获取 * @param string $leveltag 缩进标记 +------------------------------------------------- * @return array $this->tree 完整的树 */ public function gettree($parentid=0,$leveltag='') { $this->initid = $parentid; $parenttree = $this->getparenttree($parentid); foreach($parenttree as $key=>$value) { $this->tree[] = $value; $this->getchildrentree($value[$this->id],$leveltag); } return $this->tree; }}$conf = array( 1 => array('id'=>'1','parentid'=>0,'name'=>'1'), 2 => array('id'=>'2','parentid'=>0,'name'=>'2'), 3 => array('id'=>'3','parentid'=>1,'name'=>'1-1'), 4 => array('id'=>'4','parentid'=>1,'name'=>'1-2'), 5 => array('id'=>'5','parentid'=>2,'name'=>'2-1'), 6 => array('id'=>'6','parentid'=>3,'name'=>'1-1-1'), 7 => array('id'=>'7','parentid'=>4,'name'=>'1-2-1'), 8 => array('id'=>'8','parentid'=>5,'name'=>'2-1-1'), 9 => array('id'=>'9','parentid'=>8,'name'=>'2-1-1-1') );$tree = new tree($conf,'id','parentid');$arr = $tree->gettree(0,' ');foreach($arr as $val){ if($val['leveltag']) { echo $val['leveltag'].'|- '; } echo $val['name'].'
';}?>
复制代码
initialize($original,$id,$parentid); } } /** * 初始化 +------------------------------------------ * @access public +------------------------------------------ * @param array $original 原始数据 * @param string $id id的键名 * @param string $parentid 父id的键名 +------------------------------------------ * @return void */ public function initialize($original,$id,$parentid) { $this->original = $original; $this->id = $id; $this->parentid = $parentid; } /** * 获取初始节点 +---------------------------------------------- * @access protected +---------------------------------------------- * @param int $parentid 初始节点的级别 +---------------------------------------------- * @return array $parenttree */ protected function getparenttree($parentid) { $parenttree = array(); foreach($this->original as $key=>$value) { if($value[$this->parentid] == $parentid) { array_push($parenttree,$value); } } return $parenttree; } /** * 获取子树 +---------------------------------------------- * @access protected +---------------------------------------------- * @param int $id 节点的id * @param string $leveltag 缩进标记 +---------------------------------------------- * @return void */ protected function getchildrentree($id,$leveltag) { foreach($this->original as $key=>$value) { if($id == $value[$this->parentid]) { if($leveltag) { $this->getlevel($value[$this->parentid]); $value['leveltag'] = str_repeat($leveltag,$this->thislevel); $this->thislevel = 0; } $this->tree[] = $value; $this->getchildrentree($value[$this->id],$leveltag); } } } /** * 获取节点的级别 +------------------------------------------------- * @access protected +------------------------------------------------- * @param int $parentid 节点的父id +------------------------------------------------- * @return void */ protected function getlevel($parentid) { foreach($this->original as $key=>$value) { if($parentid == $value[$this->id] && $parentid != $this->initid) { $this->thislevel++; $this->getlevel($value[$this->parentid]); } } } /** * 获取完整的树 +------------------------------------------------- * @access public +------------------------------------------------- * @param int $level 从什么级别开始获取 * @param string $leveltag 缩进标记 +------------------------------------------------- * @return array $this->tree 完整的树 */ public function gettree($parentid=0,$leveltag='') { $this->initid = $parentid; $parenttree = $this->getparenttree($parentid); foreach($parenttree as $key=>$value) { $this->tree[] = $value; $this->getchildrentree($value[$this->id],$leveltag); } return $this->tree; }}$conf = array( 1 => array('id'=>'1','parentid'=>0,'name'=>'1'), 2 => array('id'=>'2','parentid'=>0,'name'=>'2'), 3 => array('id'=>'3','parentid'=>1,'name'=>'1-1'), 4 => array('id'=>'4','parentid'=>1,'name'=>'1-2'), 5 => array('id'=>'5','parentid'=>2,'name'=>'2-1'), 6 => array('id'=>'6','parentid'=>3,'name'=>'1-1-1'), 7 => array('id'=>'7','parentid'=>4,'name'=>'1-2-1'), 8 => array('id'=>'8','parentid'=>5,'name'=>'2-1-1'), 9 => array('id'=>'9','parentid'=>8,'name'=>'2-1-1-1') );$tree = new tree($conf,'id','parentid');$arr = $tree->gettree(0,' ');foreach($arr as $val){ if($val['leveltag']) { echo $val['leveltag'].'|- '; } echo $val['name'].'
';}?>
复制代码