如何将foreach创建的多个爆炸列表组合成一个数组?

时间:2013-12-14 21:38:18

标签: php arrays foreach explode comma

假设我假设我在每个用户个人资料中列出了这些信息:

  

UserA(列表)=狗,猫,羊,鸟,鸭

     

UserB(list)=斑马,狮子,猎豹,豹子

     

UserC(list)=鳄鱼,蜥蜴,青蛙,海龟

我有这个功能:

    foreach($users as $user){
       $user_list = $user->list;
       $user_list_array = explode(', ', $user_list);
          foreach($user_list_array as $user_list_item){

          }
       }
    }

这就是我难倒的地方......我如何将所有列表组合成一个大的逗号分隔列表并将该完整列表分解为一个我可以使用的数组?


编辑:以下是我正在测试的确切示例列表以及我使用以下代码获得的结果:

THE LISTS:

ListA:唱歌,饶舌,跳舞,滑稽小说,烹饪,清洁,鞋带,无腿跳

ListB:品酒,酒店管理,商业管理,财务规划,商业营销,专业驾驶

代码:

<?php
$roles = array('employee', 'administrator');
/* Loop through users to search for the admin and employee users. */
foreach( $roles as $role ) {
   $this_role = "'[[:<:]]".$role."[[:>:]]'";
   $query = "SELECT * FROM $wpdb->users WHERE ID = ANY (SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_capabilities' AND meta_value RLIKE $this_role) ORDER BY user_nicename ASC LIMIT 10000";
   $users = $wpdb->get_results($query);
        if ($users){
        $output = array();
        foreach($users as $user){
                $curuser = get_userdata($user->ID);
                $user_list = $curuser->skills;
                $user_list_array = explode(', ', $user_list);
                foreach($user_list_array as $user_list_item){
                    $output[] = $user_list_item;
                }
            }   
            echo implode(', ', $output);
        }
    }?>

结果:

唱歌,饶舌,跳舞,滑稽小说,烹饪,清洁,鞋带,跳上没有腿,,,,,品酒,酒店,商业管理,财务规划,商业营销,专业驾驶

4 个答案:

答案 0 :(得分:1)

  

如何将所有列表组合成一个以逗号分隔的大列表,并将该完整列表分解为一个我可以使用的数组?

这是一个漫长的过程:

$output = array();
foreach($users as $user){
   $user_list = $user->list;
   $user_list_array = explode(', ', $user_list);
   foreach($user_list_array as $user_list_item){
       $output[] = $user_list_item;
   }
}
echo implode(', ', $output); // your combined results

但为什么不简化它,只是连接每个数组所需的结果?

$output = '';
foreach($users as $user) {
    $output .= $user->list;
}
// this doesn't use arrays at all
echo $output;

...或者更好(就结构化数据而言),合并数组:

$output = array();
foreach($users as $user) {
    $bits = explode(', ', $user->list);
    $output = array_merge($output, $bits);
}

// this is a simplified step from your first example
echo implode(', ', $output);
  

修改

根据您的输出进行更新,其中包含大量内容:,,,,,, - 您的数据库中可能包含空白字段。你还在将这些添加到数组中,它们仍然是逗号分隔的。我建议这个:

foreach($user_list_array as $user_list_item){
    if(trim($user_list_item) != '')
        $output[] = $user_list_item;
    // only add the item if it's not blank (after trimming potential whitespace off)
}
  

编辑:有没有办法输入逗号,第一个列表停止,下一个列表开始?

当然,要么在内部 foreach循环之后使用[]结构添加它,就像这样添加一个新的数组项:

$output[] = PHP_EOL; // or \n newline, or a space, or whatever you want to seperate your sets as well as a comma

......或者更好的方式(结构上)是创建一个多维数组并最终将其内爆;

$output = array();
foreach($users as $user){
    $temp_output = array();
    $curuser = get_userdata($user->ID);
    $user_list = $curuser->skills;
    $user_list_array = explode(', ', $user_list);
    foreach($user_list_array as $user_list_item){
        if(trim($user_list_item) != '')
            $temp_output[] = $user_list_item;
    }
    $output[] = implode(', ', $temp_output);
}
// put your set delimiter here, whether it's a comma, |, \n, PHP_EOL, whatever
echo implode(', ', $output);

答案 1 :(得分:0)

$all_user_list_array = array();
foreach($users as $user){
   $user_list = $user->list;
   $user_list_array = explode(', ', $user_list);
   $all_user_list_array = array_merge($all_user_list_array, $user_list_array); 
}

$all_user_list = implode(', ', $all_user_list_array);

我基本上是创建所有列表项的一个大数组,然后将其打包到一个数组中,用逗号分隔每个值。

可能值得问一下你想要实现的目标?存储数据的方法比逗号分隔的字符串更好。这些字符串可能需要一段时间才能处理,因为它们需要进行标记。但是,我感谢您可能有自己的用例。

答案 2 :(得分:0)

$bigArray = array();
foreach($users as $user){
    $user_list = $user->list;
    $user_list_array = explode(', ', $user_list);
    foreach($user_list_array as $user_list_item){
        $bigArray[] = $user_list_item;
    }
}

答案 3 :(得分:0)

这将为您提供一个包含唯一值的完整列表(多个列表中没有重复项)。我假设使用UserA(列表),您有一组具有用户对象的用户。

$complete_list = array();

foreach( $users as $user )
{
    $list = explode( ",", $user->list );
    foreach( $list as $k=>$item ) $list[$k] = trim( $item );
    $complete_list = array_merge( $complete_list, $list );
}

如果您的users数组是一个数组,这就是解决方案:

$complete_list = array();

foreach( $users as $user )
{
    $list = explode( ",", $user['list'] );
    foreach( $list as $k=>$item ) $list[$k] = trim( $item );
    $complete_list = array_merge( $complete_list, $list );
}