2017-04-11 6 views
0

私のような性質を持つ教師のリストを持っている:連想配列を追加するには?

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 

私はスキルがさまざまなことができるので、そこにあるどのように多くの英語(および任意の他の物質)の教師に伝えたいまず第一に、私は何をすべきかであります配列内の重複をチェックし、それをカウントする:

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

することは正しいのです。この

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

は、出力は正しいですか:

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

しかし、私はまた、性別を持っているので、理想的に私は

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 

を持っていると思います私が追加してみました:

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

をしかし、それは正しくありません。私はをしようとしている

Fullcode:

<?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> 

ダンプ Iは、8(3人のユーザ

var_dump($stack); 

アレイ(11){[0] =>文字列を有しています) "francese" [1] => string(7) "chimica" [2] => string(6) "fisica" [3] => string(7) " (6) "fisica" [6] => "chimica" [7] => string(8) " spagnolo」[8] =>列(8) "Franceseの" [9] =>列(6) "fisica" [10] => 列(8) "イタリア語"}

var_dump($sex); 

アレイ(3){[0] =>列(7) "MASCHIO" [1] =>列(7) "MASCHIO" [2] => 列(7) "femmina"}

+0

* *「私はプロパティを持つ教師のリストを持っている」 - どのようなことが実際にコードに見えますか?どのようなデータ構造を使用していますか?カスタムオブジェクト?教師は '$ user'変数に入っていますか?それはオブジェクトか配列ですか? – domsson

+0

サンプル入力配列を提供できますか? – Bhaskar

+1

このような質問を投稿しないでくださいどこにエラーが表示されますか? – lalithkumar

答えて

0

コード:

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

あなたのサンプルの入力データを考慮すると、私の方法が出力されます。この:

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

こんにちはありがとう、しかし、どのように私は$ blogusers =アレイ(? –