首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对PHP数组进行排序、分组和计数

对PHP数组进行排序、分组和计数
EN

Stack Overflow用户
提问于 2013-08-11 19:41:37
回答 3查看 77关注 0票数 2

我是一个从事代码点火项目的设计师,我被这个问题卡住了!

我有这个数组

代码语言:javascript
复制
Array
(
     [Science] => 7
[War] => 5
[Mystery] => 2
[Preview Only] => 2
[Conspiracy,News ] => 2
[Drugs,Educational,Lifestyle,Society] => 1
[Educational,Nature,Science,Space] => 1
[Religion,Society] => 1
[Music] => 1
[Movies,Music] => 1
[Lifestyle] => 1
[Countries,Educational,History,War] => 1
[Educational,Society] => 1
[Science,Space,Technology] => 1
[Economics,Educational,Lifestyle,Society] => 1
[Society] => 1
[Biology,Conference,Educational] => 1
[Human Rights,Society] => 1
[Art and Artists,Biographies,Music] => 1
[Biology,Educational,Science] => 1
[Activist,Biology,Science,Society] => 1
[Countries,Drugs,War] => 1
[Drugs,War] => 1
[Technology,War] => 1
[History,War] => 1
[Biology,Educational,Environment,Nature,Science] => 1
[Science,Technology] => 1
[Educational,Science,Space] => 1
[Educational,History,Human Rights,War] => 1
[Environment] => 1
[Biographies] => 1
[Evolution,Science] => 1
[Art and Artists] => 1
)

正如您在那里看到的,它已经按数字排序。我想要实现的是从数组中删除任何重复的类别,并为每个类别添加一个+1,结果如下:

代码语言:javascript
复制
Array
(
[Science] => 14
[War] => 11
[Mystery] => 2
[Preview Only] => 2
[Conspiracy] => 2
[Society] => 4
[Nature] => 1
[space] => 1
[Religion] => 1
[Music] => 2
[Movies] => 1
[Lifestyle] => 1
[Countries] => 1
[Educational] => 12
[Space] => 1
[Lifestyle] => 1
[Society] => 3
[Biology] => 3
[Economics] => 1
[Science] => 1
[Activist] => 1
[Countries] => 1
[Drugs] => 3
[Technology] => 2
[History] => 1
[Biology] => 1
[Technology] => 1
[Space] => 1
[History] => 1
[Human Rights] => 
[Environment] => 1
[Biographies] => 2
    [Evolution] => 1
    [Art and Artists] => 1
)   

这些示例并不完全匹配,但您可以看到我想要实现的目标。谢谢大家!

EN

回答 3

Stack Overflow用户

发布于 2013-08-11 19:44:39

您可以使用array_keys()获取第一个数组的键,使用explode()去掉逗号,然后,如果explode提供了多个元素,则检查该元素是否存在,并按1递增,或者创建一个新元素。

这是第一个版本,甚至没有经过测试:

代码语言:javascript
复制
   $array1 = array(); // The array you show
   $array2 = array(); // The resulting array

   $keys = array_keys($array1);
   foreach($keys as $key)
   {
        $chunks = explode(',', $key);
        foreach($chunks as $chunk)
        {
             if(isset($array2[$chunk]))
                 $array[$chunk] += $array1[$key];
             else
                 $array[$chunk] = $array1[$key];
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2013-08-11 19:46:30

代码语言:javascript
复制
function do_the_magic( $array ){
 $result = array();
 foreach ($array as $k=>$value){
  foreach (explode(',',$k) as $category){
   $result[$category] += $value;
  }
 }
 return $result;
}

示例:

代码语言:javascript
复制
$a['ala,ma']=1;
$a['ala']=2;
print_r(do_the_magic($a));

结果:

代码语言:javascript
复制
Array ( 
 [ala] => 3 
 [ma] => 1 
)
票数 1
EN

Stack Overflow用户

发布于 2013-08-11 19:48:33

尝试如下所示:

代码语言:javascript
复制
$result = array();
foreach($data as $str_keys => $value) {
    $keys = explode(',', $str_keys);
    foreach($keys as $key) {
        if(isset($result[$key])) {
            $result[$key] += $value;
        } else {
            $result[$key] = $value;
        }
    }
}

print_r($result);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18171544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档