找回密码
 立即注册
搜索
查看: 404|回复: 0

[基础] 从下级向上找到根[递归]

  [复制链接]
发表于 2023-2-22 21:52 | 显示全部楼层 |阅读模式
在一些一级、二级、三级、四级等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为最顶级。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-12-22 15:07 , Processed in 0.023353 second(s), 13 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表