场景
获取用户的粉丝列表,及查看人与粉丝之间的关系
需要数据
登录用户查看任意用户的粉丝列表,包含其中每个粉丝与查看人的关系,包括关注、拉黑等。
例如,张三查看李四的粉丝列表,其中有王五、赵六、刘七。张三关注了王五,拉黑了刘七,那么要在返回数据中体现出来。用一张图表示下:
获取数据的逻辑一:
- 获取李四的粉丝列表
- 循环李四的粉丝列表
- 逐个判断查看者张三是否关注了此粉丝,并发此关系记录在此条粉丝的数据列中
- 逐个判断查看者张三是否拉黑了此粉丝,并发此关系记录在此条粉丝的数据列中
- 循环结束,返回数据
获取数据的逻辑二:
- 获取李四的粉丝列表
- 循环李四的粉丝列表,得到粉丝的用户id列表
- 根据粉丝的用户id列表,查询与张三的关注关系
- 根据粉丝的用户id列表,查询与张三的拉黑关系
- 循环李四的粉丝列表
- 根据第三步获取的关注关系,赋值此粉丝的数据列
- 根据第四步获取的拉黑关系,赋值此粉丝的数据列
- 结束循环,返回数据
对比
附上两种实现的简化代码(看看你的代码中是否有这种写法)
逻辑一
<?php $vistor = '张三'; $user = '李四'; $followers = getFollowers($user); foreach ($followers as &$follower){ $follower['是否关注'] = checkFollow($follower['name'], $vistor); //检查查看者与粉丝的关注关系 $follower['是否拉黑'] = checkBlacklist($follower['name'], $vistor); //检查查看者与粉丝的拉黑关系 } var_dump($followers); //输出数据 function checkFollow($username, $vistor){ //进行数据查询 } function checkBlacklist($username, $vistor){ //进行数据查询 } function getFollowers($user){ //进行数据查询 }
逻辑二
<?php $vistor = '张三'; $user = '李四'; $followers = getFollowers($user); $users = array(); foreach ($followers as &$follower){ $users[] = $follower['name']; } $followRelationships = getFollowRelationships($users, $vistor); $blacklistRelationships = getBlacklistRelationships($users, $vistor); foreach ($followers as &$follower){ $follower['是否关注'] = isset($followRelationships[$follower['name']]) ? true : false; //根据已获取的访问者与粉丝之间的关注关系,进行赋值 $follower['是否拉黑'] = isset($blacklistRelationships[$follower['name']]) ? true : false; //根据已获取的访问者与粉丝之间的拉黑关系,进行赋值 } var_dump($followers); //输出数据 function getFollowRelationships($users, $vistor){ //根据users批量获取数据 } function getBlacklistRelationships($users, $vistor){ //根据users批量获取数据 }