/**
 * @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;
}