php递归级别

时间:2010-09-22 12:48:43

标签: php arrays zend-framework recursion

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

例如:

        User1
       /    \
    User2   User3
   /    \    \ 
User4 User5  User6

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;
}

3 个答案:

答案 0 :(得分:5)

getAssociates()功能添加额外参数:

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

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

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

当您最初调用该函数以启动此过程时,为0传递$level,或将其留空并让PHP分配默认值(也0)。

答案 1 :(得分:3)

看看迭代器:

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

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

答案 2 :(得分: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);
相关问题