PHP生成樹的方法
更新時間:2015年07月28日 15:26:24 作者:憤怒的土豆
這篇文章主要介紹了PHP生成樹的方法,實(shí)例分析了php樹與節(jié)點(diǎn)操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實(shí)例講述了PHP生成樹的方法。分享給大家供大家參考。具體如下:
這個類不是我寫的 只添加了getAll()函數(shù)
php生成一個樹,可以用于產(chǎn)品分類
不知道遍歷寫的是否優(yōu)化,如果你有請分享一下吧 -.-!
運(yùn)行效果如下圖所示:
實(shí)現(xiàn)代碼如下:
<?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; //節(jié)點(diǎn)數(shù)組 //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; } //單線獲取父節(jié)點(diǎn) 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 //獲取所有節(jié)點(diǎn)數(shù)據(jù)生成樹 function getAll($id=0,$str="|-"){ if($id!=0){ $str=$str."|-"; } //遍歷所有數(shù)組檢查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); } } } //構(gòu)造樹 //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","臺式機(jī)"); $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寸-高性能企業(yè)版"); $tree->setNode("30","28","惠普-N90-17寸-普通家用版"); //獲取一個節(jié)點(diǎn)的所有父節(jié)點(diǎn) //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>生成標(biāo)簽測試</5> <select> <?php foreach($tree->res as $key=>$val){ echo "<option value='{$key}'>{$val}</option>"; } ?> </select> </body> </html>
希望本文所述對大家的php程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:
- php遍歷樹的常用方法匯總
- PHP實(shí)現(xiàn)二叉樹的深度優(yōu)先與廣度優(yōu)先遍歷方法
- PHP遞歸實(shí)現(xiàn)層級樹狀展開
- php FLEA中二叉樹數(shù)組的遍歷輸出
- PHP實(shí)現(xiàn)的線索二叉樹及二叉樹遍歷方法詳解
- PHP Class&Object -- 解析PHP實(shí)現(xiàn)二叉樹
- PHP樹的深度編歷生成迷宮及A*自動尋路算法實(shí)例分析
- PHP樹-不需要遞歸的實(shí)現(xiàn)方法
- PHP Class&Object -- PHP 自排序二叉樹的深入解析
- php實(shí)現(xiàn)的二叉樹遍歷算法示例
- PHP構(gòu)造二叉樹算法示例
- PHP字典樹(Trie樹)定義與實(shí)現(xiàn)方法示例
相關(guān)文章
php讀取mysql亂碼,用set names XXX解決的原理分享
解決亂碼的方法,我們經(jīng)常使用“set names utf8”,那么為什么加上這句代碼就可以解決了呢?下面跟著我一起來深入set names utf8的內(nèi)部執(zhí)行原理2011-12-12PHP is_subclass_of函數(shù)的一個BUG和解決方法
這篇文章主要介紹了PHP is_subclass_of函數(shù)的一個BUG和解決方法,這個BUG存在于php5.3.7版本以前,并且針對interface方面,需要的朋友可以參考下2014-06-06php實(shí)現(xiàn)webservice實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)webservice的方法,以實(shí)例形式講述了webservice的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2014-11-11