首页 > 解决方案 > 在PHP中查找多维数组的总和

问题描述

我怎么能做到这一点,我是 PHP 新手并且卡住了。请帮忙,我知道这不是一个问这类问题的平台,但由于对 PHP 的了解较少,所以仍然在问。

我有以下数组,我想做相同日期和相同键的值的总和。

 Question Array:
    Array
    (
        [0] => Array
            (
                [period] => 2019-02-01
                [Campaign 1] => 70
                [Campaign 4] => 0
                [Campaign 3] => 0
            )

        [1] => Array
            (
                [period] => 2019-02-25
                [Campaign 1] => 0
                [Campaign 4] => 30
                [Campaign 3] => 0
            )

        [2] => Array
            (
                [period] => 2019-02-25
                [Campaign 1] => 50
                [Campaign 4] => 0
                [Campaign 3] => 0
            )

        [3] => Array
            (
                [period] => 2019-02-26
                [Campaign 1] => 50
                [Campaign 4] => 0
                [Campaign 3] => 0
            )

        [4] => Array
            (
                [period] => 2019-02-26
                [Campaign 1] => 0
                [Campaign 4] => 45
                [Campaign 3] => 0
            )

        [5] => Array
            (
                [period] => 2019-02-27
                [Campaign 1] => 0
                [Campaign 4] => 240
                [Campaign 3] => 0
            )

        [6] => Array
            (
                [period] => 2019-02-27
                [Campaign 1] => 430
                [Campaign 4] => 0
                [Campaign 3] => 0
            )

    )

预期输出:

Array
(
    [0] => Array
        (
            [period] => 2019-02-01
            [Campaign 1] => 70
            [Campaign 4] => 0
            [Campaign 3] => 0
        )
        [1] => Array
        (
            [period] => 2019-02-25
            [Campaign 1] => 50
            [Campaign 4] => 30
            [Campaign 3] => 0
        )
        [2] => Array
        (
            [period] => 2019-02-26
            [Campaign 1] => 50
            [Campaign 4] => 45
            [Campaign 3] => 0
        )
        [3] => Array
        (
            [period] => 2019-02-27
            [Campaign 1] => 430
            [Campaign 4] => 240
            [Campaign 3] => 0
        )
)

标签: php

解决方案


您可以使用array_reduce它来完成它:

$array = array_reduce($array, function ($carry, $item) {
    if (!isset($carry[$item['period']])) {
         $carry[$item['period']] = $item;
    }
    else {
         $period = $item['period'];

         unset($item['period']);

         foreach ($item as $campaign => $value) {
              $carry[$period][$campaign] += $value;
         }
    }

    return $carry;
}, []);

$array = array_values($array);

var_dump($array);

推荐阅读