【问题标题】:php array sum for same value相同值的php数组总和
【发布时间】:2011-08-03 08:06:57
【问题描述】:

我有这个数组:

Array ( [0] => 
       Array ( 
        [0] => Array ( 
          [07] => Array ( 
               [2] => 352.9
               [3] => 375737
               [4] => 1000000002
           ) ) 
        [1] => Array ( 
           [07] => Array ( 
               [2] => 362.1
               [3] => 375797
               [4] => 1000000002
        ) ) 
)
Array ( [1] => 
        [0] => Array ( 
           [08] => Array ( 
               [2] => 305.7
               [3] => 375857
               [4] => 1000000002
        ) )
    )
)

我需要键 07(是月份)的最终数组总和,如下所示:

Array ( [0] => 
     Array ( 
            [0] => Array ( 
              [07] => Array ( 
                   [2] => 3254.9 ( the sum of each 07 )
                   [3] => 6521545 ( the sum )
                   [4] => 98474916521621 ( the sum )
               ) ) 
)
Array ( [1] => 
            [0] => Array ( 
              [08] => Array ( 
                   [2] => 305.7 ( not summed cause month 08 is only one )
                   [3] => 375857 ""
                   [4] => 1000000002 ""
               ) ) 
    )
)

有什么帮助吗?

【问题讨论】:

  • 你能显示它不工作的代码吗?还是您希望我们从头开始编写?
  • 你确定你的数字是正确的吗? 07 年的总和似乎有点武断,无法得出任何结论。
  • 我需要从头开始写!!

标签: php arrays sum


【解决方案1】:

在这里,试试这个 - 我确信它既不是完美也不是最优解决方案(3 foreach-es),但它适用于相当大的数据集......

$inputArray 是包含您提供的数据的多维数组,顺便说一句...

编辑:固定版本:

$result = array();

foreach( $inputArray as $subArray ) {

    foreach ( $subArray as $subKey => $member ) {

        if ( empty( $result[$subKey]) ) {

            $result[$subKey] = $member;

        } else {
            foreach ( $member as $id => $subMember ) {

                if ( empty( $result[$subKey][$id]) ) {

                    $result[$subKey][$id] = $subMember;

                } else {

                    $result[$subKey][$id] += $subMember;

                }
            }
        }
    }
}

EDIT2:由于您更改了数组的格式,因此解决方案有所不同:

注意:$array1 和 $array2 是您的“全局” - 预定义数组。

$arrayWrapper = array_merge( ( array ) $array1, ( array ) $array2 );

$result = array();

foreach ( $arrayWrapper as $inputArray ) {

    foreach( $inputArray as $subArray ) {

        foreach ( $subArray as $subKey => $member ) {

            if ( empty( $result[$subKey]) ) {

                $result[$subKey] = $member;

            } else {
                foreach ( $member as $id => $subMember ) {

                    if ( empty( $result[$subKey][$id]) ) {

                        $result[$subKey][$id] = $subMember;

                    } else {

                        $result[$subKey][$id] += $subMember;

                    }
                }
            }
        }
    }
}

用你的数据测试过,应该可以的。

干杯。

【讨论】:

  • 我试过这个,但是不行!如果我 print_r $result,我会看到相同的数组!
  • 谢谢!工作!我已经编辑了我的问题,添加了 2 个全局数组!你可以用这种方式修复代码吗?看不懂怎么弄!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2014-03-12
  • 2011-07-18
  • 2016-10-14
相关资源
最近更新 更多