php 按一列对多维数组进行分组并对另一列求和[重复]

rdlzhqv9  于 2023-05-21  发布在  PHP
关注(0)|答案(3)|浏览(131)

此问题已在此处有答案

Group array data on one column and sum data from another column to form a flat associative array(5个答案)
5天前关闭。
我有一个数组,其中包含键和值对的关联子数组。
数组的格式如下:

$info = [
    ['name1' => 'type1', 'count' => '27'],
    ['name1' => 'Type2', 'count' => '11'],
    ['name1' => 'Type1', 'count' => '5'],
    ['name1' => 'Type1', 'count' => '12'],
    ['name1' => 'type2', 'count' => '10']
];

我怎样才能对“count”键中的每个值加上“name1”键中的值,这样我就可以得到这样的计数结果?

['type1' => 44, 'type2' => 22]
sgtfey8w

sgtfey8w1#

$new   = array();

foreach ($info as $v)
{
    // Normalize the key names
    $key = ucfirst($v['name1']);

    if (isset($new[$key]))
    {
        $new[$key] += $v['count'];
    }
    else
    {
        $new[$key] = $v['count'];
    }
}

然后print_r($new);会给予你这个:

Array
(
    [Type1] => 44
    [Type2] => 21
)
wmtdaxz3

wmtdaxz32#

我的看法是。

function getTypeArray($arr, $type) {
    return array_filter($arr, function($item) use($type) {
        return strtolower($item['name1']) == $type;
    });
}

function sumArray($arr) {
    return array_sum(array_map(function($item) {
        return $item['count'];
    }, $arr));
}

$type1_count = sumArray(getTypeArray($info, 'type1'));
$type2_count = sumArray(getTypeArray($info, 'type2'));
print 'Type1: '.$type1_count;
print 'Type2: '.$type2_count;
4szc88ey

4szc88ey3#

最明显的解决方案是迭代数组:

$counts = array();

foreach($info as $elem){
    $counts[$elem['name1']] += $elem['count'];
}

var_dump($counts);

输出:

Warning: Undefined array key "type1"

Warning: Undefined array key "Type2"

Warning: Undefined array key "Type1"

Warning: Undefined array key "type2"
array(4) {
  ["type1"]=>
  int(27)
  ["Type2"]=>
  int(11)
  ["Type1"]=>
  int(17)
  ["type2"]=>
  int(10)
}

如果你希望type1Type1是相同的键(不区分大小写),你可以这样做:

foreach($info as $elem) {
    $counts[strtolower($elem['name1'])] += $elem['count'];
}

输出:

Warning: Undefined array key "type1"

Warning: Undefined array key "type2"
array(2) {
  ["type1"]=>
  int(44)
  ["type2"]=>
  int(21)
}

相关问题