Live2D

无限级递归

+++++++++++++++++++++++++++++++无限级递归+++++++++++++++++++++++++++


//例一:
public function recursion(){
$ar= $this->Cate($gittable,0,0);
return view('home.home3',['arr1' => $ast,'arr2' => $navigation,'arr3' => $data]);
}

public function Cate(&$info, $child, $pid){
$child = array();
if(!empty($info)){//当$info中的子类还没有被移光的时候
foreach ($info as $k => &$v) {
if($v->Pid == $pid){//判断是否存在子类pid和返回的父类id相等的
$v->child = $this->Cate($info, $child, $v->Tid);//每次递归参数为当前的父类的id
$child[] = $v;//将$info中的键值移动到$child当中
unset($info[$k]);//每次移动过去之后删除$info中当前的值
}
}
}
return $child;//返回生成的树形数组
}


//例二:
public function recursion(){
$model = new Recursion();//调用model层
$navigation = $model->navigation();//调用地区
$gittable = $model->gittable();//调用查询
$ast = $this->Cate($gittable,0,0);
return view('home.home3',['arr1' => $ast,'arr2' => $navigation,'arr3' => $data]);//展示给用户
}

public function Cate(&$info, $child, $pid){
$child = array();
if(!empty($info)){
foreach ($info as $k => &$v) {
if($v->p_id == $pid){
$v->child = $this->Cate($info, $child, $v->r_id);
$child[] = $v;
unset($info[$k]);
}
}
}
return $child;//返回生成的树形数组
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

以上两种方式太浪费资源,建议将递归的值,一组一组的存入缓存中,将节省大量资源!!!

 

 

 

 

 

 

 

 


// 处理数组 - Tree $data:需要处理的参数 - 根据父ID查询递归
function generateTree($data){
$items = array();
foreach ($data as $v) {
$items[$v['id']] = $v; // 这里的id是父ID
}
$tree = array();
foreach ($items as $k => $item) {
if (isset($items[$item['pid']])) { // pid是子ID
$items[$item['pid']]['son'][] = &$items[$k];
} else {
$tree[] = &$items[$k];
}
}
return $tree;
}

// 处理数组 - Tree $arr:需要处理的数组 $key:需要排序的健值
public function group_same_key($arr,$key){
$new_arr = array();
foreach($arr as $k=>$v ){
$new_arr[$v[$key]][] = $v;
}
return $new_arr;
}
posted @ 2017-04-18 19:04  韦森  阅读(532)  评论(0编辑  收藏  举报