PHP生成树的方法
程序员文章站
2023-11-12 10:26:34
本文实例讲述了php生成树的方法。分享给大家供大家参考。具体如下:
这个类不是我写的 只添加了getall()函数
php生成一个树,可以用于产品分类
不知道遍历...
本文实例讲述了php生成树的方法。分享给大家供大家参考。具体如下:
这个类不是我写的 只添加了getall()函数
php生成一个树,可以用于产品分类
不知道遍历写的是否优化,如果你有请分享一下吧 -.-!
运行效果如下图所示:
实现代码如下:
<?php 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> <?php foreach($tree->res as $key=>$val){ echo "<option value='{$key}'>{$val}</option>"; } ?> </select> </body> </html>
希望本文所述对大家的php程序设计有所帮助。