нужна помощь в передаче нескольких переменных из цикла foreach для проверки в операторе switch case - PullRequest
1 голос
/ 12 апреля 2010
$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 справа от него, показывая, что они принадлежат ему. Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь использовать эту информацию для выполнения оператора case, я не уверен, как это сделать.

Это то, что он распечатывает для пользователя, переданного в данный момент через цикл foreach:

Группа: FACULTY пользователь в группе? 1 Группа: ПЕРСОНАЛ пользователь в группе? 1

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Я прошу прощения, я не объяснил достаточно хорошо. Мне нужно пройти через все группы, к которым они принадлежат, если они принадлежат как к факультету, так и к персоналу, распечатать «Принадлежит к факультету и персоналу», если только факультет распечатает «Факультет», если только персонал распечатает «Персонал», если только студент, распечатайте «Студент», это для отображения определенной информации в зависимости от того, к какой группе принадлежит пользователь. Таким образом, код должен проверять все группы, я думаю, что list_of_groups не нужен, так как они найдут членство в группе через $ result = $ adldap-> user_groups ("$ username);.

Ответы [ 3 ]

1 голос
/ 12 апреля 2010
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
}
0 голосов
/ 12 апреля 2010

Также возможно:

$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";
    }
  }  
}
0 голосов
/ 12 апреля 2010

если вы можете собрать количество сумм этой группы пользователей (например, 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;
}
...