如何使用此数据创建关联数组并获取其结果?

时间:2017-04-11 17:18:01

标签: php arrays associative-array

我为每个用户提供了1个字段,这为我提供了一系列技能:

$user->user_description
  

用户1 =地理,英语,数学,科学

     

用户2 =英语,数学,地理

     

用户3 =法语,数学

注意 每一个都是逗号分隔字符串的短语

然后我有另一个性别字段,我得到的每个用户:

get_user_meta( $the_user_id, $gender, $single ); 
  

用户1 =男性

     

用户2 =女性

     

用户3 =男性

我正在寻找的输出是:

  • 我们有 2位数学教师,性别男性
  • 我们有 2名地理教师,性别男性女性
  • 我们有 1法语老师,性别女性
  • 我们有 2英语老师,性别男性女性
  • 我们有 1名科学老师,性别男性

这是我循环用户的方式:

$blogusers = get_users( 'orderby=nicename&role=author' );
  foreach ( $blogusers as $user ) {

注意

我试图在这里进行简化,但我更进一步了解了我拥有的代码in another question。您可能需要的任何其他信息我准备提供它,它真的让我堆叠。阻止我的主要方面是,如果将性别与每种技能分开并计算在一起,将如何将性别与这些技能联系起来。

我设法做到了:

  1. 拆分逗号分隔列表并将其推入数组
  2. 检查数组中的重复单词,以便能够达到每项技能的数量,例如2英语
  3. 能够得到这个。每个性别的数量
  4. 但是,一旦拆分,就无法为每项技能添加性别

2 个答案:

答案 0 :(得分:0)

只是一个例子,假设每个用户都拥有保存该值的这些变量。 $ i用于循环新数组的每个位置。我不确定你是如何完全循环用户的,通常我会在一段时间内($ row = $ result-> fetch_assoc)类型的情况下这样做。

$blogusers = get_users( 'orderby=nicename&role=author' );
  for($i=0;$i<count($blogusers);$i++){   // run through your list of individuals
$userAttribList[$i]['gender'] = $gender;   // Assign the position 0 attribute
$userAttribList[$i]['role']   = $role;    /// assigb pos  attribute
$userAttribList[$i]['skill']  = $skill;  // assign pos 0 attribute

}
echo "<xmp>";
print_r($userAttribList);
echo "</xmp>";

将打印出这样的userAttribList = array([0] =&gt;([&#39; gender&#39;] =&gt; male,[&#39; role&#39;] =&gt; male,[ &#39;技术人员&#39;] =&GT; skiiing));

只是一个例子,不是实际数据,而是你明白了

循环并像这样使用

foreach($userAttribList as $user){
 echo $user['gender'];
 echo $user['skill'];
 echo $user['role'];
}

答案 1 :(得分:0)

如果你可以建立一个看起来大致如此的组合数组:

$users[] = array('description'=>'Geography, English, Math, Science', 'gender' => 'male');
$users[] = array('description'=>'English, Math, Geography', 'gender' => 'female');
$users[] = array('description'=>'French, Math', 'gender' => 'male');

以下内容:

$roles = array();

foreach($users as $id => $values){
    $temp_roles = explode(',', $values['description']);
    foreach($temp_roles as $k => $v){
      $roles[trim($v)][$values['gender']][] = true;
    }
}
foreach($roles as $skill => $gender){
    $males = count($gender['male']);
    $females = count($gender['female']);

    $total = $males + $females;

    echo "We have {$total} {$skill} teachers, {$males} males, {$females} females <br>";

}

将产生(格式由您决定):

我们有2位地理老师,1位男性,1位女性 我们有2名英语教师,1名男性,1名女性 我们有3名数学老师,2名男性,1名女性 我们有1名科学教师,1名男性,0名女性 我们有1名法国教师,1名男性,0名女性