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


Merge 3 arrays and sum each field

我可以寻求一些帮助吗?我不知道如何实现这一点。我有3个数组。我想把它们合并为一个,我还想对特定user_id的outrange、internal和overdiff求和。

预期的输出数组类似于

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

提前谢谢。

//阵列1

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

//阵列3

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

你应该试试这样的方法。

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