您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么用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> <h6>生成標簽測試</5> <select> <?php foreach($tree->res as $key=>$val){ echo "<option value='{$key}'>{$val}</option>"; } ?> </select> </body> </html>
“怎么用PHP生成樹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。