本文实例讲述了php生成树的方法。分享给大家供大家参考。具体如下:
这个类不是我写的 只添加了getall()函数
php生成一个树,,可以用于产品分类
不知道遍历写的是否优化,如果你有请分享一下吧 -.-!
运行效果如下图所示:
实现代码如下:
data[$id] = $value; //print_r($this->data); //echo \r\n; $this->catearray[$id] = $parent; //节点数组 //print_r($this->catearray); } function getchildstree($id=0) { $childs=array(); foreach ($this->catearray as $child=>$parent) {if ($parent==$id){$childs[$child]=$this->getchildstree($child);} } print_r($childs)./r/n; return $childs; } function getparentstree($id=0) { $parents=array(); foreach ($this->catearray as $child=>$parent) {if ($child ==$id){$parents[$parent]=$this->getparentstree($parent);} } print_r($parents)./r/n; 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 //获取所有节点数据生成树 function getall($id=0,$str=|-){ if($id!=0){$str=$str.|-; } //遍历所有数组检查parent是否有id foreach($this->catearray as $child=>$parent){//检查是否有相等的idif($parent==$id){$this->res[$child]=$str.$this->getvalue($child);$this->getall($child,$str);}//$this->res[$child]=$child.$str.$this->getvalue($child); } }}//构造树//setnode ($id, $parent, $value)$tree = new tree();$tree->setnode(1,,电器);$tree->setnode(2,,服装);$tree->setnode(3,1,电脑);$tree->setnode(4,1,家电);$tree->setnode(5,2,男装);$tree->setnode(6,2,女装);$tree->setnode(7,3,笔记本);$tree->setnode(8,3,台式机);$tree->setnode(9,7,惠普);$tree->setnode(10,7,戴尔);$tree->setnode(11,8,火星人);$tree->setnode(12,5,西装);$tree->setnode(13,6,上衣);$tree->setnode(14,9,惠普-n90);$tree->setnode(15,9,惠普-n91);$tree->setnode(16,10,戴尔a11);$tree->setnode(17,10,戴尔a12);$tree->setnode(18,10,戴尔a13);$tree->setnode(19,6,裤子 );$tree->setnode(20,13,长袖);$tree->setnode(21,13,短袖);$tree->setnode(22,20,nike长袖);$tree->setnode(23,20,361长袖);$tree->setnode(24,22,nike长袖-均码);$tree->setnode(25,22,nike长袖-短码);$tree->setnode(26,14,惠普-n90-14寸);$tree->setnode(27,14,惠普-n90-15寸);$tree->setnode(28,14,惠普-n90-17寸);$tree->setnode(29,28,惠普-n90-17寸-高性能企业版);$tree->setnode(30,28,惠普-n90-17寸-普通家用版);//获取一个节点的所有父节点//print_r ($tree->getnodelever(12));//print_r ($tree->getparentstree(12));//$childs = $tree->getchildstree(1);//print_r($childs);//echo /r/n/r/n/r/n/r/n;/*foreach($childs as $key=>$value){ echo $key.
; //echo $tree->getlayer($key).$tree->getvalue($key).
;}*/$tree->getall();foreach($tree->res as $val){ echo $val.
;}?>
生成tree生成标签测试5>res as $key=>$val){ echo {$val}; }?>希望本文所述对大家的php程序设计有所帮助。
