anahtar case ifadesi test foreach döngüsünde birden fazla değişkene ihtiyaç

3 Cevap php
$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 döndüren ne dayalı uygun işlevi çalıştırmak yazdırmak gerekiyor.

Orada kullanıcının FAKÜLTE ve PERSONEL grupların hem de üye olduğunu, bu yüzden ben bu kullanıcılar için kontrol edin ve onlar için uygun bir içerik görüntülemek isteyebilirsiniz.

Yani kullanıcı fakülte ve personel hem de varsa onlar aynı fakülte için, mantıklı olmayabilir, bu görüntüler, sadece personel ise, o zaman, bu görüntüler, ama ben "teoride" ne anlamaya yardımcı olacağını bazı kod yazacak Ben yapmaya çalışıyorum

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

Ben bu ikisi de gruplara üye olup olmadığını kontrol edin ve uygun bir ileti görüntülemek için case ifadesi sokmak olduğunu çalışacağını nasıl emin değilim.

Foreach bak şu anda, onlar ona ait simgeleyen, onun sağında $ list_of_groups ve 1 numaralı olanları yazdırır için kullanıcı ait her grup aracılığıyla çalışır. Ben case ifadesi aracılığıyla çalıştırmak için bu bilgileri kullanmaya çalışıyor var sorun, ben bu konuda gitmek nasıl emin değilim.

Bu şu foreach döngüsü ile geçti kullanıcı için yazdırır budur:

Group: FACULTY user in group? 1 Group: STAFF user in group? 1

Herhangi bir yardım takdir edilmektedir.

EDIT: I apologize, I did not explain well enough. I need to run thru all the groups they belong to, if they belong to both Faculty and Staff, print "Belongs to Faculty and Staff", if only faculty print out "Faculty", if only staff print out "Staff", if only student, print out "Student", this is for displaying certain information based on what group the user belongs to. So the code would have to check all groups, I guess the list_of_groups is not needed, as they will find the group membership via $result=$adldap->user_groups("$username);.

3 Cevap

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

Eğer anahtarı için istendiği gibi bu bir dize döndürür. (Kullanıcı grubunda değilse döner 0 veya false user_ingroup varsayarsak.)

Addendum based on the edit:

Ben döndü dizi hiçbir sırayla formu ("Grup1", "Group2", "vb") olarak sayıyorum. Değerler olarak doğru / yanlış bir karma içine takas.

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

Şimdi kontrol etmek için normal bir conditionals kullanın.

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
}

Ayrıca mümkün:

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

if you can to collect a number of summery of this user group (like staff =1 and faculty = 2 ) , and present a number that summarize the user groups value collection , and display it ,

somthing böyle:

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