2010-09-22 96 views
2

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

例如:

 User1 
    / \ 
    User2 User3 
/ \ \ 
User4 User5 User6 

用户1拥有0级。 用户2,用户3级有1 用户4,用户5,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; 
} 

回答

5

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

private function getAssociates($userID, $level = 0) { 

,当你正在处理该树的该级别,存储$level与用户数据的其余部分,然后递归到与功能:

$this->getAssociates($associate['id'], $level + 1); 

,当你最初调用函数来启动这个过程,通过0$level,或者留空,让PHP分配默认值(也是0)。

1

容易,但我不zend的工作,所以我不能告诉你的代码,但我可以给你介绍

化妆功能

function getLevel($id,$level=0){ 
    take from db(higher lever higher_id if exist){ 
    $level++ 
    $level = getLevel(higher_id,$level); 
    } 
    return $level;  
} 

和他们致电

$level = getLevel($id); 
3

看一看迭代器:

$user_array= array('1',array(array('2'))); 
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($user_array)); 
foreach($it as $user){ 

    print_r($it->getDepth()); 
}