需要帮助从foreach循环传递多个变量到switch case语句中的测试

时间:2010-04-12 14:11:39

标签: php active-directory ldap foreach

$list_of_groups = array("FACULTY","STAFF");

foreach ($list_of_groups as $i => $group) {
  $user_in_group = $adldap->user_ingroup($username,$group);
    print "<h2>Group: ".$group." user in group? ".$user_in_group."</h2>"; // if 1, means yes
}

需要根据返回true的内容运行相应的函数。

有些用户是FACULTY和STAFF组的成员,因此我想检查这些用户并为他们显示相应的内容。

因此,如果用户既是教职员工又是教职员工,那么显示这一点,如果他们只是工作人员,则显示同样的教职员工,可能没有意义,但我会写出一些“理论上”的代码,这将有助于你了解我想要做什么

switch(Get group membership of user) {
 case "FACULTY":
 print "Faculty group member";
 break;

 case "STAFF":
 print "Staff group member";
 break;

 case "FACULTY and STAFF":
 print "Member of both faculty and staff";
 break;
}

我不确定它将如何检查它们是否是两个组的成员并通过case语句运行以显示相应的消息。

foreach外观目前通过用户所属的每个组运行,打印出$ list_of_groups中的那些以及右边的数字1,表示它们属于它。我遇到的问题是尝试使用该信息来运行案例陈述,我不确定如何去做。

这是为当前通过foreach循环传递的用户打印的内容:

组:团队中的FACULTY用户? 1 组:团队中的STAFF用户? 1

感谢任何帮助。

编辑:我道歉,我解释得不够好。我需要通过他们所属的所有团体,如果他们属于教职员工,打印“属于教职员工”,如果只有教师打印出“教师”,如果只有工作人员打印出“工作人员”,如果只是学生,打印出“学生”,这是为了根据用户所属的组显示某些信息。所以代码必须检查所有组,我想不需要list_of_groups,因为他们将通过$ result = $ adldap-&gt; user_groups(“$ username);

找到组成员资格。

3 个答案:

答案 0 :(得分:1)

function getGroupMembership($username) {
    $list_of_groups = array("FACULTY","STAFF");
    $groups = array();

    foreach ($list_of_groups as $i => $group) {
        $user_in_group = $adldap->user_ingroup($username,$group);
        if ($user_in_group)
            $groups[] = $group;
    }
    return implode(' and ', $groups);
}

这将返回您为交换机请求的字符串。 (假设user_ingroup返回0或false,如果用户不在组中。)

基于编辑的附录:

我假设返回的数组的形式(“Group1”,“Group2”,“etc”)没有顺序。将其交换为散列,使用true / false作为值。

function convertToHash($groups) {
    $hash = array();
    $foreach($groups as $group) {
        $hash[$group] = true;
    }
    return $hash;
}

现在使用正常的条件来检查。

if (isset($hash['Student']) and count($hash) == 1) {
   // just a student
}
else if (isset($hash['Student']) and isset($hash['Staff']) and count($hash) == 2) {
   // student and staff: whatever this means
}
else {
   // my method broke
}

答案 1 :(得分:0)

如果您可以收集此用户组的多个摘要(例如staff = 1和faculty = 2),并提供一个汇总用户组值集合的数字, 并显示它,

这样的事情:

switch($collect) {
 case "0":
 print "no group member";
 break;

 case "1":
 print "Staff group member";
 break;

 case "2":
 print "FACULTY group member";
 break;

 case "3":
 print "Member of both faculty and staff";
 break;
}

答案 2 :(得分:0)

也可能:

$list_of_groups   = array("FACULTY", "STAFF");
$group_membership = array();

// get group memberships and store them in a result array
foreach ($list_of_groups as $i => $group) {
  $user_in_group = $adldap->user_ingroup($username, $group);
  $group_membership[$group] = $user_in_group ? 1 : 0;
  print "<h2>Group: $group - user in group? $user_in_group</h2>";
}

// print different outputs depending on group memberships
if (array_sum($group_membership) == count($group_membership)) {
  print "Member of all groups in the list";
}
else {
  foreach ($list_of_groups as $i => $group) {
    if ($group_membership[$group] == 1) {
      print "$group group member";
    }
  }  
}