這里首先介紹一下,什么是無限極分類?
無限極分類簡單點說就是一個類可以分成多個子類,然后一個子類又可以分另外多個子類這樣無限分下去,就好象windows可以新建一個文件夾,然后在這個文件夾里又可以建一些個文件夾,在文件夾底下還可以建一些文件夾一樣
那PHP又是如何實現它的無限分類的呢?如何把它的各個分類一一列出來呢?
首先,我們來假設有這樣一個數組
$arr = array( 0=>array( 'cid'=>1, 'pid'=>0, 'name'=>'亞洲', ), 1=>array( 'cid'=>2, 'pid'=>0, 'name'=>'北美洲', ), 2=>array( 'cid'=>3, 'pid'=>1, 'name'=>'中國', ), 3=>array( 'cid'=>4, 'pid'=>2, 'name'=>'美國', ), 4=>array( 'cid'=>5, 'pid'=>3, 'name'=>'北京', ), 5=>array( 'cid'=>6, 'pid'=>3, 'name'=>'河北', ), 6=>array( 'cid'=>7, 'pid'=>5, 'name'=>'東城區', ), 7=>array( 'cid'=>8, 'pid'=>5, 'name'=>'海淀區', ), );
我們這里需要一個類似這樣的展示效果如圖
如果我們要想將這個數組如上圖般很直觀的表現出來的話就需要用php的遞歸來實現,那么怎么實現呢?看下面的核心代碼
private function GetTree($arr,$pid,$step){ global $tree; foreach($arr as $key=>$val) { if($val['pid'] == $pid) { $flg = str_repeat('└―',$step); $val['name'] = $flg.$val['name']; $tree[] = $val; $this->GetTree($arr , $val['cid'] ,$step+1); } } return $tree; }
然后我們只需要寫一個調用的代碼就好
$newarr = $this->GetTree($arr, 0, 0);
這樣看上去是不是很簡單?