PHP無限級分類實現(遞歸+非遞歸)

1,'name'=>'電腦','pid'=>0),       array('id'=>2,'name'=>'手機','pid'=>0),       array('id'=>3,'name'=>'筆記本','pid'=>1),       array('id'=>4,'name'=>'臺式機','pid'=>1),       array('id'=>5,'name'=>'智能機','pid'=>2),       array('id'=>6,'name'=>'功能機','pid'=>2),       array('id'=>7,'name'=>'超級本','pid'=>3),       array('id'=>8,'name'=>'遊戲本','pid'=>3),   );      /*======================非遞歸實現========================*/   $tree = array();   //第一步,將分類id作爲數組key,並創建children單元   foreach($categories as $category){       $tree[$category['id']] = $category;       $tree[$category['id']]['children'] = array();   }   //第二步,利用引用,將每個分類添加到父類children數組中,這樣一次遍歷即可形成樹形結構。   foreach($tree as $key=>$item){       if($item['pid'] != 0){           $tree[$item['pid']]['children'][] = &$tree[$key];//注意:此處必須傳引用否則結果不對           if($tree[$key]['children'] == null){               unset($tree[$key]['children']); //如果children爲空,則刪除該children元素(可選)           }       }   }   ////第三步,刪除無用的非根節點數據   foreach($tree as $key=>$category){       if($category['pid'] != 0){           unset($tree[$key]);       }   }      print_r($tree);      /*======================遞歸實現========================*/   $tree = $categories;   function get_attr($a,$pid){       $tree = array();                                //每次都聲明一個新數組用來放子元素       foreach($a as $v){           if($v['pid'] == $pid){                      //匹配子記錄               $v['children'] = get_attr($a,$v['id']); //遞歸獲取子記錄               if($v['children'] == null){                   unset($v['children']);             //如果子元素爲空則unset()進行刪除,說明已經到該分支的最後一個元素了(可選)               }               $tree[] = $v;                           //將記錄存入新數組           }       }       return $tree;                                  //返回新數組   }    print_r(get_attr($tree,0));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章