首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对php中的数组进行分组并计数数据

对php中的数组进行分组并计数数据
EN

Stack Overflow用户
提问于 2017-06-10 04:20:36
回答 3查看 58关注 0票数 0

最近,我正在做一个项目,根据'Franchaise‘和’超级大国‘的起源,把’超级英雄‘和’超级恶棍‘分类。我希望以数组#1的形式从数据库中获取数据,并在php中将它们显示为Array #2。

代码语言:javascript
复制
 Array #1

Array
(
  [0] => Array
    (
      [id] => 101
      [Name] => Superman
      [Franchise] => DC Comics
      [Superpower] => Inherent
    )

  [1] => Array
    (
      [id] => 908
      [Name] => Batman
      [Franchise] => DC Comics
      [Superpower] => Acquired
    )

  [2] => Array
    (
      [id] => 228
      [Name] => Wolverine
      [Franchise] => Marvel
      [Superpower] => Acquired
    )

  [3] => Array
    (
      [id] => 158
      [Name] => Iron Man
      [Franchise] => Marvel
      [Superpower] => Acquired
    )

  [4] => Array
    (
      [id] => 978
      [Name] => Thor
      [Franchise] => Marvel
      [Superpower] => Inherent
    )
)

数组#1元素必须根据它们的“专营权”进行分组,并以“超能力”来计算其中有多少是“固有的”或“获得的”。

代码语言:javascript
复制
Array #2


Array
(
  [DC Comics] => Array
    (
      [Inherent] => 1
      [Acquired] => 1
    )

  [Marvel] => Array
    (
      [Inherent] => 1
      [Acquired] => 2
    )
)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-10 07:02:25

下面是没有太多逻辑的代码,

代码语言:javascript
复制
foreach ($array1 as $val) {
    if(!isset($array2[$val['Franchise']])) {
       $array2[$val['Franchise']] = array('Inherent' => 0, 'Acquired' => 0);
    }
    $array2[$val['Franchise']][$val['Superpower']]++;
}

print_r($array2);
票数 1
EN

Stack Overflow用户

发布于 2017-06-10 05:00:59

  1. array_column()函数从2D数组聚合内部键。
  2. array_count_values()函数对数组的所有值进行计数。

对计数值使用此代码段:

代码语言:javascript
复制
$a = array ( array ("id" => "101", "Name" => "Superman", "Franchise" => "DC Comics", "Superpower" => "Inherent" ),
   array ( "id" => "908", "Name" => "Batman", "Franchise" => "DC Comics", "Superpower" => "Acquired" ),
   array ( "id" => "228", "Name" => "Wolverine", "Franchise" => "Marvel", "Superpower" => "Acquired" ),
   array ( "id" => "158", "Name" => "Iron Man", "Franchise" => "Marvel", "Superpower" => "Acquired" ),
   array ( "id" => "978", "Name" => "Thor", "Franchise" => "Marvel", "Superpower" => "Inherent" ));
  echo "<pre>";
$return = array();
// first group array values by franchise
foreach($a as $val) {
    if (!isset($return[$val['Franchise']])) {
        $return[$val['Franchise']] = array();
    }
    $return[$val['Franchise']][] = $val;
}
$arr = array();
// count elements by key value pair in particular franchise
foreach ($return as $key => $value) {
    $tmp = array_count_values(array_column($value, 'Superpower'));
    $arr[$key] = $tmp;
}
print_r($arr);

演示在这里

票数 1
EN

Stack Overflow用户

发布于 2017-06-10 06:28:37

具有单一和短的http://php.net/manual/en/function.array-reduce.php

代码语言:javascript
复制
// $arr is your initial array
$result = array_reduce($arr, function($r, $v){
    if (isset($r[$v["Franchise"]][$v["Superpower"]])) {
        $r[$v["Franchise"]][$v["Superpower"]] += $r[$v["Franchise"]][$v["Superpower"]];
    } else {
        $r[$v["Franchise"]][$v["Superpower"]] = 1;
    }
    return $r;
}, []);

print_r($result);

产出:

代码语言:javascript
复制
Array
(
    [DC Comics] => Array
        (
            [Inherent] => 1
            [Acquired] => 1
        )

    [Marvel] => Array
        (
            [Acquired] => 2
            [Inherent] => 1
        )
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44469472

复制
相关文章

相似问题

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