简单递归代码
/**
* @param $arr
* @param int $pid
* @param string $p_id
* @param string $id
* @param int $level
* @return array
* 递归分类:返回多维数组
*/
function Get_tree($arr,$pid=0,$p_id = 'cat_pid',$id = 'cat_id',$level=0){
//初始化儿子
$child = array();
//循环所有数据找$id的儿子
foreach ($arr as $key => $v) {
//找到儿子了
if ($v[$p_id] == $pid) {
//保存下来,然后继续找儿子的儿子
$child[$v[$id]] = $v;
//显示层级数
$child[$v[$id]]['level'] = $level;
//先去掉自己,自己不可能是自己的儿孙
unset($arr[$key]);
//递归找,并把找到的儿子放到一个child的字段中
$child[$v[$id]]['son'] = $this->Get_tree($arr, $v[$id],$p_id,$id,$level+1);
}
}
return $child;
}
/**
* @param $arr
* @param int $pid
* @param int $level 表示层级
* @param string $p_id
* @param string $id
* @return array
* 递归分类:返回一维数组
*/
public function tree($arr,$pid=0,$p_id = 'cat_pid',$id = 'cat_id',$level=0)
{
static $tree = array();
foreach($arr as $k=>$v){
if($v[$p_id] == $pid){
$v['level'] = $level;
$tree[] = $v;
$this->tree($arr,$v[$id],$p_id,$id,$level+1);
}
}
return $tree;
}
发表评论