【问题标题】:merge/sum multi dimentional array php合并/求和多维数组php
【发布时间】:2017-06-17 17:06:22
【问题描述】:

我正在尝试合并/求和 2 个可以包含整数或更多数组(它们本身包含整数)的数组。

当值是整数时,我需要在最终数组中对它们求和。 当值是数组时,我需要遍历这些值并将它们求和到最终的数组中。

如果一个值或子数组只存在于基础数组的1中,则需要将其添加到最终数组的子数组中。 (这是我做不到的)..)

我的数组是这样的:

 ARRAY 1
[1466859600] => Array
    (
        [TOTAL] => 27217
        [AAA] => Array
            (
                [FD_CDP] => 1746
                [LO_SC_MIC] => 4654
                [FD_ATS] => 893
                [CDP] => 40
                [SUPERVISION] => 9
                [CONTROL] => 4
                [ATS] => 4
                [EVT_ACK] => 3
            )

        [BBB] => Array
            (
                [FD_CDP] => 1376
                [LO_SC_MIC] => 4606
                [FD_ATS] => 826
                [FD_ATSS] => 451
                [LO_SFRC] => 4
                [FD_S2] => 259
                [2_LOSC] => 2
            )

        [CCC] => Array
            (
                [FD_CDP] => 1333
                [LO_SC_MIC] => 4725
                [FD_ATS] => 856
                [CONTROL] => 4
                [ATS] => 2
                [EVT_ACK] => 5
            )

 ARRAY 2
     [1466859600] => Array
    (
        [TOTAL] => 95406
        [AAA] => Array
            (
                [FD_ATSS] => 1719
                [LO_SC_MIC] => 16830
                [CONTROL] => 16
                [NEW] => 7
                [NOEL] => 206
            )

        [BBB] => Array
            (
                [SUPERVISION] => 23
                [CDP] => 158
                [CONTROL] => 40
                [2_LOSC] => 14
                [ATS] => 6
                [EVT_ACK] => 4
            )

        [CCC] => Array
            (
                [EVT_ACK] => 167
                [LO_SFRC] => 248
                [SUPERVISION] => 23
    )

我写了一个这样的函数:

    function sumArrayValues($array1, $array2)
        {
            foreach ($array1 as $key => $value) 
            {

                if (is_array($array1[$key]))
                    {
                        echo "it's an array\n I need to reloop\n";
                        sumArrayValues($array1[$key], $array2[$key]);
                    }
                else
                    {
                        echo "FIRST VALUE TO SUM\n";
                        print_r($array1[$key]."\n");
                        echo "SECOND VALUE TO SUM\n";
                        print_r($array2[$key]."\n");
                        $array1[$key] = (int)$array1[$key] +(int)$array2[$key];
                        echo "--------RESULT of SUM array1&2----------\n";
                    }
            }
        return $array1;

        }

但是这个函数没有考虑 2 种(可能更多)情况:如果子数组的顺序不同,如果子数组或值只存在于第二个数组中。

函数的例子会很有帮助,但在更基本的层面上,我什至无法计算出算法来做到这一点。 有任何想法吗 ?

【问题讨论】:

标签: php arrays


【解决方案1】:

你可以get all the keys foreach 循环,live demo。

注意,您也可以检查任何数组的键是否未定义,然后将定义的值保存为该键。

function sumArrayValues($array1, $array2)
{
    $keys = array_keys($array1 + $array2);
    foreach ($keys as $key) 
    {
        if (is_array($array1[$key]) || is_array($array2[$key]))
            $array1[$key] = sumArrayValues($array1[$key], $array2[$key]);
        else
            @$array1[$key] = (int)$array1[$key] +(int)$array2[$key];
    }
    return $array1;
}

【讨论】:

  • 您的示例效果很好,除非 $arrayX[$key] 为 NULL,因此我必须在函数开头添加一个条件,以便在数组不存在时创建数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2013-03-08
  • 2011-01-07
相关资源
最近更新 更多