这里首先介绍一下,什么是无限极分类?
无限极分类简单点说就是一个类可以分成多个子类,然后一个子类又可以分另外多个子类这样无限分下去,就好象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);
这样看上去是不是很简单?