按索引累积2D数组

时间:2010-03-26 19:07:14

标签: php arrays

我有一个如下所示的数组:

Array
(
    [0] => Array
        (
            [amount] => 60.00
            [store_id] => 1
        )

    [1] => Array
        (
            [amount] => 40.00
            [store_id] => 1
        )

    [2] => Array
        (
            [amount] => 10.00
            [store_id] => 2
        )
)

将数组减少到总计与store_id相关的'amount'的类似数组的好方法。

对于实例,我想得到这个:

Array
(
    [0] => Array
        (
            [amount] => 100.00
            [store_id] => 1
        )


    [2] => Array
        (
            [amount] => 10.00
            [store_id] => 2
        )
)

2 个答案:

答案 0 :(得分:2)

准确再现您的要求:

<?php

$stores = array();
$result = array();
foreach($rows as $i => $entry) {
  if (false === ($j = array_search($entry['store'], $stores))) {
    $stores[$i] = $entry['store'];
    $result[$i] = $entry;
  }
  else {
    $result[$j]['amount'] += $entry['amount'];
  }
}

答案 1 :(得分:2)

要详细说明Thrawn的答案,你想要的是你的数组被store_id索引。你最终想要的是:

    array (
        [1] => 100.00
        [2] => 10.00
    )

如果你不能从一开始就构造它,但是你被迫使用这个原始数组结构(我们称之为$stores),请执行以下操作:

    $totals = array();
    foreach ($stores as $store) {
        if (!array_key_exists($store['store_id'], $totals)) {
            $totals[$store['store_id']] = $store['amount'];
        }
        else {
            $totals[$store['store_id']] += $store['amount'];
        }
    }

有很多方法可以执行array_key_exists检查。 <{1}}和empty都足够了。