PHP產生樹的方法_php技巧

來源:互聯網
上載者:User

本文執行個體講述了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";/*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程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.