简体   繁体   English

如何通过比较同一数组的任何一个或两个值来合并和求和值

[英]How merge and sum values by comparing any one or two values of the same array

Below is the array in php and I need function to solve n numbers of array as displayed in Expected result by summing the (2) and (3) values if (0) and (1) are matching:下面是 php 中的数组,如果 (0) 和 (1) 匹配,我需要 function 通过对 (2) 和 (3) 值求和来解决预期结果中显示的 n 个数组:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Week - 1
                    [1] => 2019-08-05
                    [2] => 1
                    [3] => 2
                )

            [1] => Array
                (
                    [0] => Week - 2
                    [1] => 2019-08-12
                    [2] => 3
                    [3] => 4
                )

            [2] => Array
                (
                    [0] => Week - 3
                    [1] => 2019-08-19
                    [2] => 5
                    [3] => 6
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => Week - 1
                    [1] => 2019-08-05
                    [2] => 7
                    [3] => 8
                )

            [1] => Array
                (
                    [0] => Week - 2
                    [1] => 2019-08-12
                    [2] => 9
                    [3] => 10
                )

            [2] => Array
                (
                    [0] => Week - 3
                    [1] => 2019-08-19
                    [2] => 11
                    [3] => 12
                )

            [3] => Array
                (
                    [0] => Week - 4
                    [1] => 2019-08-26
                    [2] => 13
                    [3] => 14
                )

        )

)

Expected Result:预期结果:

            [0] => Array
                (
                    [0] => Week - 1
                    [1] => 2019-08-05
                    [2] => 8
                    [3] => 10
                )

            [1] => Array
                (
                    [0] => Week - 2
                    [1] => 2019-08-12
                    [2] => 12
                    [3] => 14
                )

            [2] => Array
                (
                    [0] => Week - 3
                    [1] => 2019-08-19
                    [2] => 16
                    [3] => 18
                )

            [3] => Array
                (
                    [0] => Week - 4
                    [1] => 2019-08-26
                    [2] => 13
                    [3] => 14
                )

Need help to get the above expected result for the raised query.需要帮助才能获得上述查询的预期结果。 I tried below code:我尝试了以下代码:

<?php
$sum = [];
foreach($weekly as $aSet) {
    foreach($aSet as $k => $kv) {
        $i = 0;
        foreach($kv as $v) {
            $sum[$k][$i] += $v;
            $i++;          
        }
    }
}
?>

But it will add all types:但它会添加所有类型:

        [0] => Array
            (
                [0] => 0
                [1] => 4038
                [2] => 8
                [3] => 10
            )

        [1] => Array
            (
                [0] => 0
                [1] => 4038
                [2] => 12
                [3] => 14
            )

        [2] => Array
            (
                [0] => 0
                [1] => 4038
                [2] => 16
                [3] => 18
            )

        [3] => Array
            (
                [0] => 0
                [1] => 4038
                [2] => 13
                [3] => 14
            )

I want get sum only for 2 and 3rd value and need to keep constant for 0 and 1st value for exact match我只想获得第 2 和第 3 值的总和,并且需要保持第 0 和第 1 值的精确匹配

Because all your nested arrays are with predefined amount of elements, all of those with the same indexes, you can use a for loop instead of the third foreach :因为所有嵌套的 arrays 都具有预定义数量的元素,所有具有相同索引的元素,您可以使用for循环而不是第三个foreach

$sum = [];
foreach($weekly as $aSet)
{
    foreach($aSet as $k => $kv)
    {
        $sum[$kv[0]][0] = $kv[0];
        $sum[$kv[0]][1] = $kv[1];
        for($i = 2; $i <= 3; $i++)
        {
            $sum[$kv[0]][$i] += $kv[$i];
        }
    }
}
echo "<pre>";
print_r($sum);
echo "</pre>";

With a for loop you can cycle inside the array considering only the needed elements of that array (in your case the indexes 0 and 1 aren't useful in this loop).使用for循环,您可以在数组内部循环,仅考虑该数组所需的元素(在您的情况下,索引01在此循环中没有用)。

Output: Output:

Array
(
    [Week - 1] => Array
        (
            [0] => Week - 1
            [1] => 2019-08-05
            [2] => 8
            [3] => 10
        )

    [Week - 2] => Array
        (
            [0] => Week - 2
            [1] => 2019-08-12
            [2] => 12
            [3] => 14
        )

    [Week - 3] => Array
        (
            [0] => Week - 3
            [1] => 2019-08-19
            [2] => 16
            [3] => 18
        )

    [Week - 4] => Array
        (
            [0] => Week - 4
            [1] => 2019-08-26
            [2] => 13
            [3] => 14
        )

)

If you prefer the array with numbered indexes do that:如果您更喜欢带有编号索引的数组,请执行以下操作:

echo "<pre>";
print_r(array_values($sum));
echo "</pre>";

Output: Output:

Array
(
    [0] => Array
        (
            [0] => Week - 1
            [1] => 2019-08-05
            [2] => 8
            [3] => 10
        )

    [1] => Array
        (
            [0] => Week - 2
            [1] => 2019-08-12
            [2] => 12
            [3] => 14
        )

    [2] => Array
        (
            [0] => Week - 3
            [1] => 2019-08-19
            [2] => 16
            [3] => 18
        )

    [3] => Array
        (
            [0] => Week - 4
            [1] => 2019-08-26
            [2] => 13
            [3] => 14
        )

)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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