如何对多个数组的值求和并在有条件的情况下添加到新数组?

时间:2019-04-04 18:16:15

标签: php arrays

感觉像是重复的,但是我遇到了很多类似的问题,不能完全解决问题。

我有以下要按“部门”分组的数组,然后对“ MCAP”键求和。

Array
(
    [0] => Array
        (
            [TICKER] => ABC
            [SECTOR] => 30
            [MCAP] => 1000
        )

    [1] => Array
        (
            [TICKER] => XYZ
            [SECTOR] => 30
            [MCAP] => 500
        )

    [2] => Array
        (
            [TICKER] => ASD
            [SECTOR] => 25
            [MCAP] => 750
        )

)

我要做的是:

(
    [30] => Array
        (
            [MCAP] => 1500
        )

    [25] => Array
        (
            [MCAP] => 750
        )

)

我尝试过使用foreach循环,而我所设法管理的最好的方法是对所有MCAP值求和。我对此无能为力,感谢您在挑战中的帮助。

编辑:这是我尝试过的:

$sector = array();

foreach($stocks as $row) {
    $sum += $row['MCAP'];
    $sector[$row['SECTOR']]['MCAP'] = $sum;
}

但是结果是这样的

[30] => Array
    (
        [MCAP] => 1500
    )

[25] => Array
    (
        [MCAP] => 2250
    )

3 个答案:

答案 0 :(得分:1)

尝试像这样使用扇区值求和:

$res = array();
foreach($data as $key=> $value){
  $res[$value['SECTOR']] += $value['MCAP'];
}

var_dump($res); // this output the expected result you want

答案 1 :(得分:1)

遍历数组,并检查结果数组中是否存在当前的SECTOR键。如果不是,则将其定义为零。然后将MCAP的当前值添加到结果数组。

$result = array();
foreach ($array as $key=> $value) {
    if (!isset($result[$value['SECTOR']]))
        $result[$value['SECTOR']]['MCAP'] = 0;
    $result[$value['SECTOR']]['MCAP'] += $value['MCAP'];
}
print_r($result);

答案 2 :(得分:1)

您需要创建另一个空数组来保存sum。循环时,可以创建每个section并求和mcap的值:

$arraySum = array();

foreach($array as $key => $value) {
    if (!isset($arraySum[$value['SECTOR']]))
        $arraySum[$value['SECTOR']] = $value['MCAP'];
    else
        $arraySum[$value['SECTOR']] += $value['MCAP'];
}

print_r($arraySum);