首页 > 编程 > PHP > 正文

PHP生成树的方法

2020-03-22 17:11:15
字体:
来源:转载
供稿:网友
本文实例讲述了PHP生成树的方法。分享给大家供大家参考。具体如下:这个类不是我写的 只添加了getAll()函数
php生成一个树,可以用于产品分类
不知道遍历写的是否优化,如果你有请分享一下吧 -.-!运行效果如下图所示:实现代码如下:html' target='_blank'>class Tree public $data=array(); public $cateArray=array(); public $res=array(); function Tree() function setNode ($id, $parent, $value) $parent = $parent $parent:0; $this- 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){ //检查是否有相等的ID if($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." br //echo $tree- getLayer($key).$tree- getValue($key)." br $tree- getAll();foreach($tree- res as $val){ echo $val." br !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" html xmlns="http://www.w3.org/1999/xhtml" head meta http-equiv="Content-Type" content="text/html; charset=utf-8" / title 生成Tree /title /head body h5 生成标签测试 /5 select foreach($tree- res as $key= $val){ echo " option value='{$key}' {$val} /option /select /body /html 希望本文所述对大家的php程序设计有所帮助。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表