PHP递归所有下级

/**
 * 获取用户下属ID集合
 * @param $uid int
 * @param $ids string
 * @author jack
 * @throws string
 * @return string
 */
public function getUnderlingUIds($uid, $ids='')
{
    $back = Db('ns_member','',false)->field('uid')->where('parent_uid',$uid)->select();
    if (!empty($back) && is_array($back)) {
        foreach ($back as $v) {
            //防止当前人的ID重复去查询,形成恶性循环
            if ($v['id'] == $uid) {
                continue;
            }
            $back2 = Db('ns_member','',false)->where('parent_uid',$v['uid'])->count('uid');
            if ($back2 > 0) {
                $ids = $this->getUnderlingUIds($v['uid'],$ids);
            } else {
                $ids .= ','.$v['id'];
            }
        }
     }
    $ids = $uid.','.$ids.',';
    $ids = str_replace(',,', ",", $ids);
    $ids = trim($ids, ',');
    return $ids;
}

 数组方式:

/**
     * 获取所有的下级用户编号
     * @author Yohole
     */
    public function getUnderlingUIds($id, $idsArr = [])
    {
        $back = UserModel::field('id')->where(['pid' => $id, 'status' => 1, 'is_deleted' => 0])->select()->toArray();
        if (!empty($back) && is_array($back)) {
            foreach ($back as $v) {
                //防止当前人的ID重复去查询,形成恶性循环
                if ($v['id'] == $id) {
                    continue;
                }
                $back2 = UserModel::where(['pid' => $v['id'], 'status' => 1, 'is_deleted' => 0])->count('id');
                if ($back2 > 0) {
                    $idsArr = $this->getUnderlingUIds($v['id'], $idsArr);
                } else {
                    $idsArr[] = $v['id'];
                }
            }
        }
        array_unshift($idsArr, $id);
        return array_unique($idsArr);
    }

 

posted @ 2020-06-23 22:42  大雾哥  阅读(1500)  评论(0)    收藏  举报