PHP试题网_中国最大的免费网络PHP试题测试平台,PHP试卷调查,PHP试卷模板、PHP考试测验
公告: 【20201211】公告:复杂试卷成功上线,问答模块很快上线……网站将有诸多变化

在一些一级、二级、三级、四级等N级推广关系时,要找到最顶级人物的id。


数据库表结构:

member_id用户id

vip_recommend_user_id为推荐member_id人的id.


function recursive_relation_vip_($member_id, $root_members_arr)
{
    static $row;
    $row['root_member_id'] = 0;
    if(empty($row['link'])){
        $row['link']  = '<-'.$member_id;//用于记录上下级链路关系
    }
    if(empty($row['curr_member_id'])) {
        $row['curr_member_id'] = $member_id;
    }

    if(!empty($root_members_arr)) {
        $arrmemberid = array_keys($root_members_arr);
    }else{
        $arrmemberid = [0];
    }

    if( in_array($member_id, $arrmemberid)){
        $row['root_member_id'] = $member_id;
        $row['link'] .= '<-0';
        $is_vir = 1;//虚拟顶级关系链路
    }else {
        $vip_recommend_user_id = Db::name('member')->where('member_id', $member_id)->value('vip_recommend_user_id');
        if (empty($vip_recommend_user_id)) {
            $row['root_member_id'] = $member_id;
            $row['link'] =  $row['link'] . '<-' . $vip_recommend_user_id;
        } else {
            $row['link'] = $row['link'] . '<-' . $vip_recommend_user_id;
            return recursive_relation_vip_($vip_recommend_user_id, $root_members_arr);
        }
        $is_vir = 0;//非虚拟根用户关系
    }

    //非特殊人员要将虚拟根用户清0
    if(empty($is_vir)){
        $root_member_id_ = $row['root_member_id'];
        $row['root_member_id'] = 0;
        $row['link']     = str_replace('<-'.$root_member_id_.'<-', '<-'.'#0'.$root_member_id_.'#0'.'<-', $row['link']);
    }

    return $row;
}


使用方法:

$row         = recursive_relation_vip_($member_id, $root_members_arr);

传入一个用户$member_id, 特殊顶级人物$root_members_arr数据(在具体使用时为[member_id]=[用户信息])。


调用示例:

$cc = recursive_relation_vip_(1802897, [1802827=>['member_name'=>'我是顶级人']]);

dd($cc);


效果如下:

image.png

链路关系从右向左,带#0的表示此人为非指定推广人。0为最顶级。


作者:OK兄 浏览次数:125