代码之家  ›  专栏  ›  技术社区  ›  Alex Pliutau

php递归级别

  •  2
  • Alex Pliutau  · 技术社区  · 14 年前

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

            User1
           /    \
        User2   User3
       /    \    \ 
    User4 User5  User6
    

    用户1具有级别0。 用户2,用户3有等级1。 如何在递归中找到这个? 这是我的密码:

    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 回复  |  直到 14 年前
        1
  •  5
  •   Marc B    14 年前

    将一个额外的参数添加到 getAssociates()

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

    当你处理这一级的树时,存储 $level 使用其余的用户数据,然后递归到函数中:

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

    0 $级 ,或将其留空并让PHP指定默认值(也可以 ).

        2
  •  3
  •   Auirio    14 年前

    $user_array= array('1',array(array('2')));
    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($user_array));
    foreach($it as $user){
    
         print_r($it->getDepth());
    }
    
        3
  •  1
  •   jatt    14 年前

    make函数

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