好久没有用递归函数,这次用发现不太会用了,写个例子为自己留个印象
需要达到的效果
无限分类递归
public function memberinfo(){

    $memberid = $_POST['memberid'];  //成员id
    $rs = db('family_member')->where(['userid'=>$memberid])->find();
    $arr = $this->get_children($rs['id']);
    $list = [
        'user'=>$rs,
        'xia'=>$arr
    ];

    return returnResult($list);

}
写递归函数
//传入父级id
protected function get_children( id,id,arr=[]){

    $family  = db('family_member')->where(['p_id'=>$id])->select();
    if($family->isEmpty()){
        return $arr;
    }
    $children = [];
    foreach ($family as $v) {
        $array=array(
            'id' => $v['id'],
            'name' => $v['name'],
            'familyid' => $v['familyid'],
            'several' => $v['several'],
            'p_id' => $v['p_id'],
        );
        $array['xiaji'] = $this->get_children($v['id'],$arr);

        array_push($children,$array);
    }
    return $children;

}
达到的效果为
无限分类递归
如果需要控制向下查几次代码如下,由$i来控制

protected function get_children(id,id,arr=[],$i=0){

    $family  = db('family_member')->where(['p_id'=>$id])->select();
    $i++;
    if($i==3){
        return $arr;
    }
    if($family->isEmpty()){
        return $arr;
    }
    $children = [];
    foreach ($family as $v) {
        $array=array(
            'id' => $v['id'],
            'name' => $v['name'],
            'familyid' => $v['familyid'],
            'several' => $v['several'],
            'p_id' => $v['p_id'],
        );
        $array['xiaji'] = $this->get_children($v['id'],$arr,$i);

        array_push($children,$array);
    }
    return $children;

}

相关文章: