無限極分類不是用遞迴 兩個函式解決 新增和迴圈【附上程式碼】
阿新 • • 發佈:2018-12-23
實現無限極分類
首先先看一下資料結構
//資料結構 // $items = array( // 1 => array('id' => 1, 'pid' => 0, 'name' => 'anhui'), // 2 => array('id' => 2, 'pid' => 0, 'name' => 'zhejiang'), // 3 => array('id' => 3, 'pid' => 1, 'name' => 'hefei'), // 4 => array('id' => 4, 'pid' => 3, 'name' => 'zhangfeng'), // 5 => array('id' => 5, 'pid' => 1, 'name' => 'anqing'), // 6 => array('id' => 6, 'pid' => 0, 'name' => 'sichuan'), // 7 => array('id' => 7, 'pid' => 0, 'name' => 'dayang'), // 8 => array('id' => 8, 'pid' => 3, 'name' => 'guangdong'), // );
以上的是資料結構 items表一共有三個欄位 id自增 pid為0代表最頂級分類 name分類名稱
兩個方法 addtree用來新增 genrateTree用來排序返回一個數組//顯示樹結構 function generateTree($items){ $tree = array(); foreach($items as $item){ if(isset($items[$item['pid']])){ $items[$item['pid']]['son'][] = &$items[$item['id']]; }else{ $tree[] = &$items[$item['id']]; } } return $tree; } //新增子分類 function addtree(&$arr,$pid,$name){ $num=count($arr)+1; if($num==0){$num=0;} $arr[$num]=array( 'id'=>$num, 'pid'=>$pid, 'name'=>$name ); }
以下附上完整程式碼
<?php //無限極分類 //顯示樹結構 function generateTree($items){ $tree = array(); foreach($items as $item){ if(isset($items[$item['pid']])){ $items[$item['pid']]['son'][] = &$items[$item['id']]; }else{ $tree[] = &$items[$item['id']]; } } return $tree; } //新增子分類 function addtree(&$arr,$pid,$name){ $num=count($arr)+1; if($num==0){$num=0;} $arr[$num]=array( 'id'=>$num, 'pid'=>$pid, 'name'=>$name ); } $items=array(); //資料結構 // $items = array( // 1 => array('id' => 1, 'pid' => 0, 'name' => 'anhui'), // 2 => array('id' => 2, 'pid' => 0, 'name' => 'zhejiang'), // 3 => array('id' => 3, 'pid' => 1, 'name' => 'hefei'), // 4 => array('id' => 4, 'pid' => 3, 'name' => 'zhangfeng'), // 5 => array('id' => 5, 'pid' => 1, 'name' => 'anqing'), // 6 => array('id' => 6, 'pid' => 0, 'name' => 'sichuan'), // 7 => array('id' => 7, 'pid' => 0, 'name' => 'dayang'), // 8 => array('id' => 8, 'pid' => 3, 'name' => 'guangdong'), // ); addtree($items,'0','成都'); addtree($items,'1','自貢'); addtree($items,'2','富順'); addtree($items,'0','上海'); addtree($items,'4','外灘'); addtree($items,'3','市中花園'); addtree($items,'3','福州花園'); // showtree($items); print_r(generateTree($items)); ?>