在一些一级、二级、三级、四级等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);
效果如下:
链路关系从右向左,带#0的表示此人为非指定推广人。0为最顶级。
|