php递归级别

Ale*_*tau 2 php arrays recursion zend-framework

我有递归功能.有一个层次结构的用户结构.我将一个用户ID发送到我的函数,它应该找到所有用户.函数返回所有关联用户的数组.我的任务是找到这个用户的级别.

例如:

        User1
       /    \
    User2   User3
   /    \    \ 
User4 User5  User6
Run Code Online (Sandbox Code Playgroud)

User1的级别为0. User2,User3的级别为1. User4,User5,User6的级别为2.如何在递归中找到此值?这是我的代码:

private function getAssociates($userId) {
    global $generation;
    global $usersUnder;
    if (!isset($generation)) {
        $generation = 1;
    }
    $userDb           =  new Lyf_DB_Table('user');
    $associatesSelect =  $userDb->Select();
    $associatesSelect -> from('user', array('id'))->where('enroller_id = ?', $userId);
    $associates       =  $userDb->fetchAll($associatesSelect)->toArray();
    if (!empty($associates)) {
        foreach ($associates as $associate) {
            $usersUnder[$generation] = $associate['id'];
            $this->getAssociates($associate['id']);
        }
    }
    return $usersUnder;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 5

getAssociates()函数中添加一个额外的参数:

private function getAssociates($userID, $level = 0) {
Run Code Online (Sandbox Code Playgroud)

当你处理树的那个级别时,将其$level与其余的用户数据一起存储,然后通过以下方式递归到函数中:

$this->getAssociates($associate['id'], $level + 1);
Run Code Online (Sandbox Code Playgroud)

当你开始调用函数来启动这个过程中,传递0$level,或将其留空,让PHP分配默认(还0).