时间:2021-05-26
本文实例讲述了PHP生成树的方法。分享给大家供大家参考。具体如下:
这个类不是我写的 只添加了getAll()函数
php生成一个树,可以用于产品分类
不知道遍历写的是否优化,如果你有请分享一下吧 -.-!
运行效果如下图所示:
实现代码如下:
<?phpclass 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";$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><?php foreach($tree->res as $key=>$val){ echo "<option value='{$key}'>{$val}</option>"; }?></select></body></html>希望本文所述对大家的php程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP实现多级分类生成树的方法。分享给大家供大家参考,具体如下:条件,数据库里分类是按id,fid(父ID)实现多级分类的!使用方法:$sql="
本文实例讲述了PHP字典树(Trie树)定义与实现方法。分享给大家供大家参考,具体如下:Trie树的概念(百度的解释):字典树又称单词查找树,Trie树,是一种
本文实例讲述了php无序树实现方法。分享给大家供大家参考。具体如下:运行效果如下图所示:php代码如下:(stdclass)node//一些树的实现常常是采用节
本文实例讲述了PHP工厂模式、单例模式与注册树模式。分享给大家供大家参考,具体如下:三种基本设计模式1、工厂模式:工厂方法或者类生成对象,而不是在代码中直接ne
最小生成树最小生成树(minimumspanningtree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。最小生成树可以用Prim(普里