按一列对二维数组的行进行分组,并对合并行中的另一列求和

问题描述 投票:0回答:2

我从 MySql 表返回一个元素数组,该数组如下所示:

array (
  0 => 
    array (
      'name' => 'BMW',
      'amount' => '5',
    ),
  1 => 
    array (
      'name' => 'Ford',
      'amount' => '2',
    ),
  2 => 
    array (
      'name' => 'BMW',
      'amount' => '4',
    ),
  3 => 
    array (
      'name' => 'Ford',
      'amount' => '8',
    ),
  4 => 
    array (
      'name' => 'Fiat',
      'amount' => '2',
    ),
)

我喜欢将具有相同“name”元素的所有数组合并在一起,并将相应的“amount”元素加在一起,这样上述数组的输出将是:

array (
  0 => 
    array (
      'name' => 'BMW',
      'amount' => '9',
    ),
  1 => 
    array (
      'name' => 'Ford',
      'amount' => '10',
    ),
  2 => 
    array (
      'name' => 'Fiat',
      'amount' => '2',
    ),
)
php arrays multidimensional-array sum grouping
2个回答
2
投票

您可以使用

GROUP BY
语句直接通过 MySQL 选择请求的数据,而不是使用 PHP 操作数据。

SELECT name, SUM(amount) total FROM mytable GROUP BY name

SUM()
在本例中是聚合函数,其他函数也可用。

循环时您应该能够像这样访问数据:

echo $row['name'], $row['total'];

0
投票

你可以尝试一下 array_merge_recursive();

http://php.net/manual/en/function.array-merge-recursive.php

然后循环结果数组并对元素求和。

或者你使用这段代码或者我认为下面的解决方案也很合理

$result = array();
foreach ($tab as $key => $elem){
        if (array_key_exists($elem['name'],$result)) {
            $result[$elem['name']] += $elem['amount'];
        } else {
            $result[$elem['name']] = $elem['amount'];
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.