php两种无限分类方法实例
一、递归方法
$items=array( array('id'=>1,'pid'=>0,'name'=>'一级11'), array('id'=>2,'pid'=>0,'name'=>'一级12'), array('id'=>3,'pid'=>1,'name'=>'二级21'), array('id'=>4,'pid'=>3,'name'=>'三级31'), array('id'=>5,'pid'=>1,'name'=>'二级22'), array('id'=>6,'pid'=>3,'name'=>'三级32'), array('id'=>7,'pid'=>6,'name'=>'四级41'), ); $i=0; functionformatTree($arr,$pid=0){ $tree=array(); $temp=array(); global$i; if($arr){ foreach($arras$k=>$v){ if($v['pid']==$pid){// $temp=formatTree($arr,$v['id']); $temp&&$v['son']=$temp; $tree[]=$v; } } } return$tree; } print_r(formatTree($items));
二、非递归方法
functiongenTree($items){ $tree=array();//格式化好的树 foreach($itemsas$item) if(isset($items[$item['pid']])){ $items[$item['pid']]['son'][]=&$items[$item['id']]; } else{ $tree[]=&$items[$item['id']]; } return$tree; }
$items=array( 1=>array('id'=>1,'pid'=>0,'name'=>'一级11'), 2=>array('id'=>2,'pid'=>1,'name'=>'二级21'), 3=>array('id'=>3,'pid'=>1,'name'=>'二级23'), 4=>array('id'=>4,'pid'=>9,'name'=>'三级31'), 5=>array('id'=>5,'pid'=>4,'name'=>'四级43'), 6=>array('id'=>6,'pid'=>9,'name'=>'三级32'), 7=>array('id'=>7,'pid'=>4,'name'=>'四级41'), 8=>array('id'=>8,'pid'=>4,'name'=>'四级42'), 9=>array('id'=>9,'pid'=>1,'name'=>'二级25'), 10=>array('id'=>10,'pid'=>11,'name'=>'二级22'), 11=>array('id'=>11,'pid'=>0,'name'=>'一级12'), 12=>array('id'=>12,'pid'=>11,'name'=>'二级24'), 13=>array('id'=>13,'pid'=>4,'name'=>'四级44'), 14=>array('id'=>14,'pid'=>1,'name'=>'二级26'), 15=>array('id'=>15,'pid'=>8,'name'=>'五级51'), 16=>array('id'=>16,'pid'=>8,'name'=>'五级52'), 17=>array('id'=>17,'pid'=>8,'name'=>'五级53'), 18=>array('id'=>18,'pid'=>16,'name'=>'六级64'), ); print_r(genTree($items));