【问题标题】:SUM values across two multidimensional arrays in PHPPHP中两个多维数组的SUM值
【发布时间】:2014-11-28 20:45:32
【问题描述】:

我有一个问题,如何在 PHP 中对两个多维数组的值求和。 两个数组存储在变量中,例如 $array_1$array_2

$array_1 和 $array_2 都有子数组,它们的数据又存储在各自的数组中。请注意,数据被组织为 x 数据和 y 数据,其中 y 数据只是一个日期戳。

我需要对这两个数组 $array_1 和 $array_2 的 x 数据值求和,就 y 数据 (DATE) 维度而言。这就是为什么它对我来说很棘手,我发现的关闭答案只有数字。

例子:

$array_1

Array
(
    [0] => object
        (
            [x-data] => Array
                (
                    [data1] => 0
                    [data2] => 1
                    [data3] => 2
                    [data4] => 3
                    [data5] => 4
                    [data6] => 5
                    [data7] => 6
                    [data8] => 7
                )

            [y-data] => Array
                (
                    [date] => 20141127
                )

        )

    [1] => object
        (
            [x-data] => Array
                (
                    [data1] => 2
                    [data2] => 4
                    [data3] => 6
                    [data4] => 8
                    [data5] => 10
                    [data6] => 12
                    [data7] => 14
                    [data8] => 16
                )

            [y-data] => Array
                (
                    [date] => 20141128
                )

        )

)

$array_2

Array
(
    [0] => object
        (
            [x-data] => Array
                (
                    [data1] => 0
                    [data2] => 1
                    [data3] => 2
                    [data4] => 3
                    [data5] => 4
                    [data6] => 5
                    [data7] => 6
                    [data8] => 7
                )

            [y-data] => Array
                (
                    [date] => 20141127
                )

        )

    [1] => object
        (
            [x-data] => Array
                (
                    [data1] => 0
                    [data2] => 1
                    [data3] => 2
                    [data4] => 3
                    [data5] => 4
                    [data6] => 5
                    [data7] => 6
                    [data8] => 7
                )

            [y-data] => Array
                (
                    [date] => 20141128
                )

        )

)

$result = $array_1 + $array_2 应该如下所示:

Array
(
    [0] => object
        (
            [x-data] => Array
                (
                    [data1] => 0
                    [data2] => 2
                    [data3] => 4
                    [data4] => 6
                    [data5] => 8
                    [data6] => 10
                    [data7] => 12
                    [data8] => 14
                )

            [y-data] => Array
                (
                    [date] => 20141127
                )

        )

    [1] => object
        (
            [x-data] => Array
                (
                    [data1] => 2
                    [data2] => 5
                    [data3] => 8
                    [data4] => 11
                    [data5] => 14
                    [data6] => 17
                    [data7] => 20
                    [data8] => 23
                )

            [y-data] => Array
                (
                    [date] => 20141128
                )

        )

)

我已经尝试了一些东西,例如 foreach() 内部的 foreach() 但我得到了数组值的乘法效果(2 x 2 = 4 个子数组而不是 2)。

有什么帮助吗? 谢谢!

【问题讨论】:

    标签: php arrays multidimensional-array sum addition


    【解决方案1】:

    这是一个部分答案,因为这仅适用于 $array1 和 $array2 具有相同数量的元素并且具有唯一的 y 数据,并且它们的每个 x 数据(具有共同的 y 数据)具有相同的数字元素。

    $result = array_multisum($array1, $array2);
    
    function array_multisum($array1, $array2)
    {
        $newArray = array();
        foreach ($array1 as $object1) {
            $newObject = new stdClass();
            // find object in the 2nd array having the same data as current object
            foreach ($array2 as $object2) {
                // if object is found, sum the x-data with the current object 
                if ($object1->{'y-data'}['date'] === $object2->{'y-data'}['date']) {
                    $newObject->{'x-data'} = data_sum($object1->{'x-data'}, $object2->{'x-data'});
                    break;
                }
            }
            $newObject->{'y-data'} = $object1->{'y-data'};
            $newArray[] = $newObject;
        }
        return $newArray;
    }
    
    function data_sum($data1, $data2) 
    {
        $newData = array();
        // sum up the values for each key
        foreach (array_keys($data1) as $key) {
            $newData[$key] = $data1[$key] + $data2[$key];
        }
        return $newData;
    }
    

    【讨论】:

    • 嗨,Lynn,谢谢你的回答,然而,如果你看看数组是如何构造的,那么这并不是那么简单,部分 'object'、'x-data' 和 'y-data ' 是由一个类生成的,简单地将它们放在你的函数中是行不通的,并且会产生很多警告和错误。感谢您的帮助,但无法正确测试它,现在不得不放弃这个想法。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多