(可能很简单)有条件的PHP循环

时间:2012-09-12 18:57:31

标签: php

我已经设置了这样的数据库表:

table: group
id     name          subGroupOf
1      grandparent   NULL
2      parent           1
3      child            2

这是我在php中尝试做的事情:

当用户访问页面时,该页面告诉auth()函数他们需要'子'权限。因为'child'是'parent'的子组,所以两个组的成员都应该获得权限。但是,父母是“祖父母”的子群体,因此所有三个群体的成员都应该有权访问。

由于嵌套了多少个子组没有限制,我知道我需要一个循环。但我总是画一个空白。

我知道需要检查该组是否为subGroupOf,如果是,则验证父组。这是我到目前为止所做的:

        // Get group of current user
        $group = mysqli_query($cxn,'SELECT group FROM user WHERE id='.$userID);

        // Compare group to permissions
        if($group == $permissions)
            return TRUE;

        // Check if group is a sub group
        $subGroupOf = mysqli_query($cxn,'SELECT subGroupOf FROM group WHERE id="'.$group.'"');
        if($subGroupOf == NULL)
        {
            // Wrong permissions
        }

        // Check if the parent group matches permissions
        if($subGroupOf == $permissions)
            return TRUE;

不知何故,我需要循环最后一部分,并在到达

时停止
$subGroupOf == NULL

我对编程很新,所以我还在弄清楚逻辑......有什么想法吗?我不需要为我编写的所有内容(无论如何都要对代码进行总结),我只需要帮助搞清楚结构..

2 个答案:

答案 0 :(得分:0)

您可以通过检查子组的递归函数执行此操作,并继续执行直到“subGroupOf”id为NULL。

例如:

function getTopParentGroup($groupId, $cxn) {
    $subGroupOf = mysqli_query($cxn,'SELECT subGroupOf FROM group WHERE id="'.$groupId.'"');

    //There is no parent, just return the group
    if($subGroupOf == NULL)
    {
        return $group;
    }
    //A parent has been found, continue...  
    getTopParentGroup($subGroupOf, $cxn);
}

答案 1 :(得分:0)

另一种方法,但你还需要一个递归函数:

  1. 创建一个将组的层次结构添加到数组
  2. 的函数
  3. 遍历组数组,并检查您的权限。
  4. 功能

    function getGroupHierarchy($groupId, $cxn)
    {
        $groupArray = array();
    
        //Push the group to the array..
        $groupArray[] = $groupId;
    
        //Get the parent id of this group
        $subGroupOf = mysqli_query($cxn,'SELECT subGroupOf FROM group WHERE id="'.$groupId.'"');
    
        //There is no parent, just return the array.
        if($subGroupOf == NULL)
        {
            return $groupArray;
        }
    
        //Continue checking the parent group(s).
        getGroupHierarchy($subGroupOf, $cxn);
    }
    

    调用该函数并检查权限:

    // Get group of current user
    $groupId = mysqli_query($cxn,'SELECT group FROM user WHERE id='.$userID);
    
    $allGroups = getGroupHierarchy($groupId, $cxn);
    
    //Compare each group to permissions.
    foreach($groupArray as $group)
    {
        if($group == $permissions)
            return TRUE;
    }