好久没有用递归函数,这次用发现不太会用了,写个例子为自己留个印象
需要达到的效果
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( 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(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;
}