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

Posted

技术标签:

【中文标题】如何使用此数据创建关联数组并获取其结果?【英文标题】:How do I create an associative array with this data and get its results? 【发布时间】:2017-04-11 17:18:00 【问题描述】:

每个用户都有一个字段,这给了我一系列技能:

$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。您可能需要的任何其他信息我都准备好提供了,这真的让我受益匪浅。阻碍我的主要一点是,一旦这些技能被拆分和计数,如何将性别与每个技能联系起来。

我做了什么:

    拆分逗号分隔列表并将它们推送到数组中 检查数组中的重复单词,以便能够获得每个技能的数量,例如2 英语 能够拥有全部。男女人数

但是,一旦拆分,无法为每个技能添加性别

【问题讨论】:

你想要类似数组 [userID/0] -> ([gender]=>male , [role]=>Math) @clearshot66 是的,只要确保每个用户都有一套技能,这些技能可以共享也可以不共享,对于每项技能,我们仍然需要记住它的性别 【参考方案1】:

如果你能建立一个大致如下所示的组合数组:

$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女

【讨论】:

好的,这看起来很有希望,但不,我不确定如何建立一个组合数组。考虑到我让每个技能短语循环用户并抓住$user-&gt;user_description 并让每个用户性别我循环并执行此操作$gender = get_user_meta( $the_user_id, $gender, $single ); 我如何将 2 个返回合并到一个关联数组中? ($user[] 应该是一个关联数组吧?) 也许我可以使用 array_merge ? foreach ( $blogusers as $user ) $users[$user-&gt;ID] = array( "description" =&gt; $user-&gt;user_description , "gender" =&gt; get_user_meta( $user-&gt;ID, $gender, $single ) ); 在顶部添加,结果我们有 0 名法国教师,0 名男性,0 名女性。首先,我认为我们没有计算角色。我通过比较添加到数组中的重复角色字符串来做到这一点 如果我在第一次 foreach 结束时做print_r($users[$user-&gt;ID] );,我会得到正确的结果:Array ( [description] =&gt; francese, chimica, fisica, scienze [gender] =&gt; Array ( [0] =&gt; maschio ) ) Array ( [description] =&gt; inglese, fisica, chimica, spagnolo [gender] =&gt; Array ( [0] =&gt; maschio ) ) Array ( [description] =&gt; francese, fisica, italiano [gender] =&gt; Array ( [0] =&gt; femmina ) ) 然而我们有 0 名 chimica 老师,0 名男性,0 名女性【参考方案2】:

只是一个例子,假设每个用户都有这些变量来保存值。 $i 用于循环新数组的每个位置。我不确定你是如何完全循环用户的,通常我会在 while($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] => (['gender']=>male,['role']=>male,['skill']=>skiiing));

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

像这样循环使用

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

【讨论】:

我们不会在短语中拆分技能列表,对吗?这是假设我们每个技能都有一个具有性别的用户,对吗? 没有分割。想一想,这个人有这些属性。如果考虑数据库列/excel列,性别、技能、角色是列标题,$i是行ID或“人”;您的描述并不完全清楚,但如果您只需要性别和角色(在数学、英语等中的角色),您可以省略技能添加,我只是将其作为第三个属性,以表明您可以做到这一点方式 因为这样您就可以循环该数组并使用这些特定属性对用户进行计数并生成计数 我确实需要拆分,因为我需要实现 我们有 2 位性别为男性的数学老师因此我需要首先拆分技能列表,因为它们是一个短语,然后计算我们在数组中有多少个,我通过计算重复来计算,最后为每个技能获取性别 数据到底是怎么进来的?

以上是关于如何使用此数据创建关联数组并获取其结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中获取 JSON 数组并打印其值?

PHP如何调用JS函数并获取其返回的数据?

当用户双击其关联文件时,如何打开应用程序?

如何使用ajax创建数组并在没有回调函数的情况下对其进行修改?

如何使用jQuery在关联数组中获取表单的输入值

如何使用从 laravel 中的数组中获取的各种术语进行 mysql 关联查询