资讯专栏INFORMATION COLUMN

使用递归实现多级分享机制

B0B0 / 2675人阅读

摘要:获取好友列表这是邀请好友的层级获取失败结果

class Invitation extends Controller
{

protected $friend_list = array();
protected $level = 1;
//获取好友列表
public function invite_friends_list($my_all_friends = null,$begin  = false)
{
    $uid = Auth::user()->id;
    if(!$begin && empty($my_all_friends)){
        $my_all_friends = InvitationRelation::select("user_id")->where("fuid" , $uid)->get()->toArray();
        $this->friend_list[$uid] = $my_all_friends;
        array_push($this->friend_list[$uid] , array("level"=>$this->level));
    }
    foreach($my_all_friends as $friend_id) {
        
        if(! empty($friend_id)){
            // Log::info("这是邀请好友的id:",$friend_id);
            $my_all_friends = InvitationRelation::select("user_id")->where("fuid" , $friend_id)->get()->toArray();
            // Log::info("层级:",$my_all_friends);
            if(count($my_all_friends) > 0){
                $this->level++;
                $this->friend_list[$friend_id["user_id"]] = $my_all_friends;
                array_push($this->friend_list[$friend_id["user_id"]] , array("level"=>$this->level));
                try{
                    $this->invite_friends_list($my_all_friends ,true);
                } catch (Exception $e) {
                    return Response::json(["status" => "error", "error_msg" => "获取失败"], 422);
                }
            }
            continue;
        }
    }
    return Response::json($this->friend_list);
}

}

结果:
{

"1": [
    {
        "user_id": 2
    },
    {
        "user_id": 3
    },
    {
        "user_id": 4
    },
    {
        "level": 1
    }
],
"2": [
    {
        "user_id": 5
    },
    {
        "user_id": 6
    },
    {
        "user_id": 7
    },
    {
        "user_id": 8
    },
    {
        "level": 2
    }
],
"7": [
    {
        "user_id": 9
    },
    {
        "user_id": 10
    },
    {
        "user_id": 11
    },
    {
        "level": 3
    }
],
"8": [
    {
        "user_id": 12
    },
    {
        "user_id": 13
    },
    {
        "user_id": 14
    },
    {
        "user_id": 15
    },
    {
        "level": 4
    }
],
"13": [
    {
        "user_id": 20
    },
    {
        "user_id": 21
    },
    {
        "user_id": 22
    },
    {
        "user_id": 23
    },
    {
        "level": 5
    }
],
"15": [
    {
        "user_id": 16
    },
    {
        "user_id": 17
    },
    {
        "user_id": 18
    },
    {
        "user_id": 19
    },
    {
        "level": 6
    }
],
"18": [
    {
        "user_id": 24
    },
    {
        "user_id": 25
    },
    {
        "user_id": 26
    },
    {
        "user_id": 27
    },
    {
        "user_id": 28
    },
    {
        "level": 7
    }
]

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31594.html

相关文章

  • 04递归遍历多级文件目录

    摘要:练习递归打印多级目录需求遍历文件夹及文件夹的子文件夹定义一个方法参数传递类型的目录方法中对目录进行遍历打印被遍历的目录名称对遍历得到的对象进行判断判断是否是文件夹是一个文件夹则继续遍历这个文件夹我们发现方法就是传递文件夹遍历文件夹的方法所以 package com.itheima.demo02.Recursion; import java.io.File; /* 练习: 递归打...

    scq000 评论0 收藏0
  • 阿里Java研发工程师实习面经,附面试技巧

    摘要:这样可以检测你是否学好,而且,若是你都没法条理清晰地讲给自己,那怎么条理清晰地讲给面试官呢接下来就写下三次面试题目阿里一面个人介绍项目介绍,项目介绍首先讲最好的项目,因为后面的项目可能都没时间去讲。 作者:如何进阿里链接:https://www.nowcoder.com/disc...来源:牛客网 前言 十分幸运 拿到阿里云的offer,感谢周围无数人对我的支持和鼓励,所以写篇面经希望...

    zollero 评论0 收藏0
  • [译] Angular 的 @Host 装饰器和元素注入器

    摘要:装饰器我们为啥要讨论元素注入器而不是装饰器这是因为会把元素注入器依赖解析过程限制在当前组件视图内。但是一旦使用了装饰器,整个依赖解析过程就会在第一阶段完成后停止解析,也就是说,元素注入器只在组件视图内解析依赖,然后就停止解析工作。 原文链接:A curious case of the @Host decorator and Element Injectors in Angular 我...

    marek 评论0 收藏0
  • 马蜂窝ABTest多层分流系统的设计与实现

    摘要:为了解决以上问题,我们的分流系统选择基于实现,通过或者协议来传递分流信息。正交是指用户进入所有的实验之间没有必然关系。流量层内实验分流流量层内实验的因子有设备流量层。统计功效对于置信区间特征值等产品化功能支持。 什么是 ABTest 产品的改变不是由我们随便「拍脑袋」得出,而是需要由实际的数据驱动,让用户的反馈来指导我们如何更好地改善服务。正如马蜂窝 CEO 陈罡在接受专访时所说:「有...

    mingzhong 评论0 收藏0

发表评论

0条评论

B0B0

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<