合并3个数组并对每个字段求和

时间:2015-11-18 08:10:58

标签: php

请问一些帮助,我不知道如何实现这一目标。我有3个阵列。我想将它们合并为一个,并且我还希望将特定user_id的outrange,inside和overdiff相加。

预期的输出数组就像这样

user_id => 39,
full_name => Mila Doe,
outrange =>20,
inside=>30,
overdiff=>50

提前谢谢。

// ARRAY1

Array
(
    [0] => stdClass Object
        (
            [id] => 5
            [user_id] => 39
            [fullname] => Mila Doe
            [outrange] => 03.55
        )

    [1] => stdClass Object
        (
            [id] => 2
            [user_id] => 39
            [fullname] => Mila Doe
            [outrange] => 02.00
        )

    [2] => stdClass Object
        (
            [id] => 1
            [user_id] => 39
            [fullname] => Mila Doe
            [outrange] => 05.00
        )

    [3] => stdClass Object
        (
            [id] => 3
            [user_id] => 39
            [fullname] => Mila Doe
            [outrange] => 12.00
        )

    [4] => stdClass Object
        (
            [id] => 4
            [user_id] => 39
            [fullname] => Mila Doe
            [outrange] => 03.00
        )

    [5] => stdClass Object
        (
            [id] => 6
            [user_id] => 39
            [fullname] => Mila Doe
            [outrange] => 12.00
        )

)

//数组2

Array
(
    [0] => Array
        (
            [id] => 5
            [user_id] => 39
            [inside] => -1.0833
            [fullname] => Mila Doe
        )

    [1] => Array
        (
            [id] => 2
            [user_id] => 39
            [inside] => 4.0000
            [fullname] => Mila Doe
        )

    [2] => Array
        (
            [id] => 1
            [user_id] => 39
            [inside] => 11.0000
            [fullname] => Mila Doe
        )

    [3] => Array
        (
            [id] => 3
            [user_id] => 39
            [inside] => 11.0000
            [fullname] => Mila Doe
        )

    [4] => Array
        (
            [id] => 4
            [user_id] => 39
            [inside] => 2.0000
            [fullname] => Mila Doe
        )

    [5] => Array
        (
            [id] => 6
            [user_id] => 39
            [inside] => 1.7500
            [fullname] => Mila Doe
        )

)

// ARRAY3

Array
(
    [0] => stdClass Object
        (
            [id] => 5
            [user_id] => 39
            [fullname] => Mila Doe
            [overdiff] => 03.55
        )

    [1] => stdClass Object
        (
            [id] => 2
            [user_id] => 39
            [fullname] => Mila Doe
            [overdiff] => 06.00
        )

    [2] => stdClass Object
        (
            [id] => 1
            [user_id] => 39
            [fullname] => Mila Doe
            [overdiff] => 04.00
        )

    [3] => stdClass Object
        (
            [id] => 3
            [user_id] => 39
            [fullname] => Mila Doe
            [overdiff] => 11.00
        )

    [4] => stdClass Object
        (
            [id] => 4
            [user_id] => 39
            [fullname] => Mila Doe
            [overdiff] => 05.00
        )

    [5] => stdClass Object
        (
            [id] => 6
            [user_id] => 39
            [fullname] => Mila Doe
            [overdiff] => 01.45
        )

)

1 个答案:

答案 0 :(得分:1)

你应该尝试类似的东西。

<?php

$arrays = array($array1, $array2, $array3);
//result will be a map : key = user_id, value = information and sums
$result = array();
//go through each array
foreach ($arrays as $array) {
    //go through each data of each array
    foreach ($array as $userData) {
        //first time we see data about this user ?
        if (!isset($result[$userData['user_id']])) {
            $result[$userData['user_id']] = array();
        }

        //set or sum informations of this user in the result array.
        $result[$userData['user_id']]['user_id'] = $userData['user_id'];
        $result[$userData['user_id']]['full_name'] = $userData['full_name'];
        if (isset($userData['outrange'])) {
            $result[$userData['user_id']]['outrange'] += $userData['outrange'];
        }
        if (isset($userData['inside'])) {
            $result[$userData['user_id']]['inside'] += $userData['inside'];
        }
        if (isset($userData['overdiff'])) {
            $result[$userData['user_id']]['overdiff'] += $userData['overdiff'];
        }

    }
}

$result = array_values($result);