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));