php使用公共密钥合并子数组

时间:2017-03-12 16:19:44

标签: php arrays

我从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',
    ),
)

我喜欢将所有数组合并到一起使用相同的名称'元素并将相应的数量加在一起'元素使得上面数组的输出为:

array (
  0 => 
    array (
      'name' => 'BMW',
      'amount' => '9',
    ),
  1 => 
    array (
      'name' => 'Ford',
      'amount' => '10',
    ),
  2 => 
    array (
      'name' => 'Fiat',
      'amount' => '2',
    ),
)

2 个答案:

答案 0 :(得分:2)

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

SELECT name, SUM(amount) total FROM mytable GROUP BY name
在这种情况下,

SUM()aggregate function,其他人也可以使用。

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

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

答案 1 :(得分: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'];
        }
}