简体   繁体   中英

Find sum of multidimensional array in PHP

How can I achieve this, I am new in PHP and stuck. please help, I know this is not a platform for asking this kind of question, but still asking because of less knowledge about PHP.

I have the following array and I want to do the sum of value which is on the same date and same key.

 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
            )

    )

Expected Output:

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
        )
)

You can use array_reduce to accomplish it:

$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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM