首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户树-获取特定阶段的所有用户

用户树-获取特定阶段的所有用户
EN

Stack Overflow用户
提问于 2016-12-23 17:43:04
回答 1查看 47关注 0票数 1

我对以下情况有意见:

我是通过递归函数来查询的,这是一棵有子用户的用户树。我将使用它作为一个附属系统。

代码语言:javascript
复制
function getChildUsersRecursive($user, $users=array()) {
    $em = $this->container->get('doctrine')->getManager();

    $user = $em->getRepository('AppBundle:User')->findOneById($user->getId());
    $childUsers = $user->getChildUsers();

    foreach ($childUsers as $childUser) {

        if (!$childUser->getChildUsers()->isEmpty()) {
            $users[$childUser->getId()] = $this->getChildUsersRecursive($childUser, $users);
        } else {
            $users[$childUser->getId()] = array();
        }
    }

    return $users;
}

这个很好用。结果是这样的数组:

代码语言:javascript
复制
array:3 [
  2 => array:1 [
    6 => array:1 [
      7 => array:1 [
        8 => []
      ]
    ]
  ]
  3 => []
  4 => []
]

现在,我想创建一个函数getUsersByStage($user,$stage),为给定的用户获取一个特定阶段的所有用户。

想象一下,用户3和用户4也有一个子用户。通过调用getUsersByStage($user,0),我希望获得第一个维度的所有条目,在本例中,用户2、3和4。通过调用getUsersByStage($user,1),我希望所有这些用户都更深,因此用户2、3和4的直接子用户。

我希望你能理解我的意思。我想这很简单,但我看不见树木用的木头。

提前谢谢你,祝你圣诞快乐!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-23 20:24:01

您可以在此树中执行BFS遍历,并输出到给定深度的用户。下面的示例假设您已经拥有给定用户的用户数组。

代码语言:javascript
复制
$a = [ 2 => [ 6=> [ 7=> [8=>[]]] ], 3 => [], 4 => [] ];


function getUsersByStage($users, $stage)
{
    $usersFound = [];
    $q = new \SplQueue();
    /* enqueue current array, level, user (key value) */
    $q->enqueue([$users, -1, -1]);
    while (!$q->isEmpty()) {
       $elem = $q->dequeue();
       $currentUserArray = $elem[0];
       $currentLevel = $elem[1];
       if ($currentLevel > $stage) break;
       $currentUser = $elem[2];
       if ($currentLevel == $stage) $usersFound[] = $currentUser;
       /* enqueue all children */
       foreach ($currentUserArray as $user=>$subArray) {
          $q->enqueue([$subArray, $currentLevel+1, $user]);
       }
    }
    return $usersFound;
}
print_r(getUsersByStage($a, 0)); /* [2, 3, 4] */
print_r(getUsersByStage($a, 1)); /* [6] */
print_r(getUsersByStage($a, 2)); /* [7] */
print_r(getUsersByStage($a, 3)); /* [8] */
print_r(getUsersByStage($a, 4)); /* [] */
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41305713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档