2017-04-11 5 views
0

Ich habe eine Liste von Lehrern mit Eigenschaften wie:Wie man ein assoziatives Array hinzufügt?

teacher 1 skills = English, Math 
teacher 1 gender = Male 

teacher 2 skills = Spanish, Math, Law 
teacher 1 gender = sex = Female 

teacher 3 skills = English, Geography 
teacher 3 gender = Male 

Zunächst einmal, wie viele Englisch sagen, ich will (und jede andere Frage) Lehrer gibt es, da die Fähigkeiten unterschiedlich sein kann, was ich zu tun ist in der Anordnung, ein Duplikat zu überprüfen und es zählen:

 $stack = array(); 
    $blogusers = get_users('orderby=nicename&role=author'); 
    foreach ($blogusers as $user) { 
    $myUsers = $user->user_description (this is the skill list); 
    $mystrings = strtolower($user->user_description); 
    $descTokens = explode(',', $mystrings); 
    $descTokens = array_map('trim',$descTokens); 
    $stack = array_merge($stack, $descTokens); 
    } 
    $count_values = array(); 
    foreach ($stack as $a) { 
     @$count_values[$a]++; 
    } 
    $total_duplicates = 0; 
    foreach ($count_values as $a) { 
     if($count_values[$a]<=1){ 
      unset($count_values[$a]); 
     } else{ 
      $total_duplicates += $count_values[$a]; 
     } 
     } 

Dann dieses tun

<ul class="margin-top-20"> 
     <?php 
     foreach ($count_values as $key=>$count) { 
      echo '<li>'.$count.' di <strong>'.$key.'</li>'; 
     } 
     ?> 
    </ul> 

das ist richtig, ist die Ausgabe rechts:

2 English teachers 
2 Math teachers 
1 Spanish 
1 Law 
1 Geography 

Aber ich habe auch das Geschlecht, so Idealerweise würde ich gerne haben

2 English teachers, 1 male, 1 male 
2 Math teachers, 1 male, 1 female 
1 Spanish, 1 female 
1 Law, 1 female 
1 Geography, 1 male 

Ich habe versucht, und fügte hinzu:

 $sex = array(); 
     $user_sex = get_user_meta($the_user_id, $gender, $single); 
     array_push($sex, $user_sex); 
     foreach($descTokens as $lang){ 
     $userSex[$lang] += $user_sex; 
     } 
     foreach ($count_values as $key=>$count) { 
     echo '<li>'.$count.' di <strong>'.$key.' gender '. $userSex[$key] .'</li>'; 
     } 

Aber das ist nicht richtig.

Fullcode ich versuche:

<?php 
    $stack = array(); 
    $userID = array(); 
    $nPost = array(); 
    $listmaterie = array(); 
    $materie = array(); 
    $gender = 'sesso'; 
    $single = true; 
    $sex = array(); 
    $blogusers = get_users('orderby=nicename&role=author'); 
    $userSex = array(); 
    foreach ($blogusers as $user) { 
     $myUsers = $user->user_description; 
     $mystrings = strtolower($user->user_description); 
     $descTokens = explode(',', $mystrings); 
     $descTokens = array_map('trim',$descTokens); 
     $stack = array_merge($stack, $descTokens); 
     $the_user_id = $user->ID; 
     $numPosts = count_user_posts($the_user_id); 
     array_push($userID, $the_user_id); 
     array_push($nPost, $numPosts); 
     $user_sex = get_user_meta($the_user_id, $gender, $single); 
     array_push($sex, $user_sex); 
     foreach($descTokens as $lang){ 
      $userSex[$lang] += $user_sex; 
     } 
    } 
     // get the count for each language by counting the duplicate strings; 
    $count_values = array(); 
    foreach ($stack as $a) { 
     @$count_values[$a]++; 
    } 
    $total_duplicates = 0; 
    foreach ($count_values as $a) { 
     if($count_values[$a]<=1){ 
      unset($count_values[$a]); 
     } else{ 
      $total_duplicates += $count_values[$a]; 
     } 
     } 
    $count_sex = array(); 
    foreach ($sex as $b) { 
     @$count_sex[$b]++; 
    } 
    $total_duplicates_sex = 0; 
    foreach ($count_sex as $b) { 
     if($count_sex[$b]<=1){ 
      unset($count_sex[$b]); 
     } else{ 
      $total_duplicates_sex += $count_sex[$b]; 
     } 
     } 
    ?> 
    <h3 class="margin-top-40">Numero complessivo docenti su Jikū:</h3> 
    <ul class="margin-top-20 margin-bottom-20"> 
    <?php 
     $totalInsegnanti = count($userID); 
     echo '<li>'. $totalInsegnanti .'</li>'; 
    ?> 
    </ul> 
    <h3>Totale insegnanti per materia su Jikū:</h3> 
    <ul class="margin-top-20"> 
     <?php 
     foreach ($count_values as $key=>$count) { 
      echo '<li>'.$count.' di <strong>'.$key.' gender '. $userSex[$key] .'</li>'; 
     } 
     ?> 
    </ul> 
    <h3>Totale insegnanti sesso su Jikū:</h3> 
    <ul class="margin-top-20"> 
     <?php 
     foreach ($count_sex as $key=>$count_sex) { 
      echo '<li>'.$count_sex.' <strong>'.$key.'</strong></li>'; 
     } 
     ?> 
    </ul> 

Dumps Ich habe 3 Benutzer

var_dump($stack); 

array (11) {[0] => string (8) "francese" [1] => string (7) "chimica" [2] => string (6) "fisica" [3] => string (7) " scienze [4] => string (7) "inglese" [5] => string (6) "fisica" [6] => string (7) "chimica" [7] => string (8) " spagnolo“[8] => string (8) "francese"[9] => string (6) "fisica"[10] => Saite (8) "Italiano"}

var_dump($sex); 

Array (3) {[0] => string (7) "maschio" [1] => string (7) "maschio" [2] => string (7) "femmina"}

+0

* „Ich habe eine Liste von Lehrern mit Eigenschaften“ * - was bedeutet, dass tatsächlich aussehen wie in Code? Welche Datenstruktur verwenden Sie? Ein benutzerdefiniertes Objekt? Sind die Lehrer in der Variable $ user? Ist das ein Objekt oder ein Array? – domsson

+0

können Sie ein Beispiel für ein Eingabe-Array bereitstellen? – Bhaskar

+1

posten Sie die Fragen nicht so, sagen Sie uns, wo Sie Fehler bekommen? – lalithkumar

Antwort

0

Code:

foreach($blogusers as $user){ 
    foreach(explode(', ',$user->user_description) as $skill){ //"comma then space" delimited 
     $result[$skill][]=get_user_meta($user->ID,'sesso','true'); // push user's gender into subject's array 
    } 
} 

foreach($result as $subject=>$gender_array){ 
    echo "<div>",sizeof($gender_array)," $subject teachers"; 
    $count_genders=array_count_values($gender_array); // avoids php NOTICE @ array_walk 
    array_walk($count_genders,function($v,$k){echo ", $v $k",($v!=1?"s":"");}); 
    echo "</div>"; 
} 

Unter Berücksichtigung Ihrer Probe Eingangsdaten, meine Methode ausgibt dies:

2 English teachers, 2 Males 
2 Math teachers, 1 Male, 1 Female 
1 Spanish teachers, 1 Female 
1 Law teachers, 1 Female 
1 Geography teachers, 1 Male 
+0

Hallo danke, aber wie bekomme ich $ blogusers = array (? –

Verwandte Themen