【问题标题】:How to get the array sum of each column of each sub array?如何获取每个子数组每一列的数组和?
【发布时间】:2015-07-08 16:20:18
【问题描述】:

这是我的数组:

Array ( 
    [HRI] => Array (
        [0] => Array (
            [0] => 14157.72
            [1] => 10157.72
        )
        [1] => Array (
            [0] => 39140.94
            [1] => 39140.94
        )
        [2] => Array (
            [0] => 36383.66
            [1] => 36383.66
        )
        [3] => Array (
            [0] => 38508.00
            [1] => 38508.00
        )
        [4] => Array (
            [0] => 8424.00
            [1] => 8424.00
        )
    )
    [MPU] => Array (
        [0] => Array (
            [0] => 432.00
            [1] => 1200.00
        )
    )
    [RHA] => Array (
        [0] => Array (
            [0] => 111562.50
            [1] => 94237.50
        )
        [1] => Array (
            [0] => 37880.00
            [1] => 31400.00
        )
        [2] => Array (
            [0] => 11364.00
            [1] => 9420.00
        )
        [3] => Array (
            [0] => 23719.50
            [1] => 18832.50
        )
        [4] => Array (
            [0] => 26705.00
            [1] => 21800.00
        )
        [5] => Array (
            [0] => 5190.00
            [1] => 3816.00
        )
        [6] => Array (
            [0] => 8707.50
            [1] => 6966.00
        )
        [7] => Array (
            [0] => 0.00
            [1] => 0.00
        )
        [8] => Array (
            [0] => 0.00
            [1] => 0.00
        )
        [9] => Array (
            [0] => 0.00
            [1] => 0.00
        )
        [10] => Array (
            [0] => 128952.00
            [1] => 94500.00
        )
        [11] => Array (
            [0] => 0.00
            [1] => 0.00
        )
    )
    [PBA] => Array (
        [0] => Array (
            [0] => 58816.26
            [1] => 50784.36
        )
    )
)

我想遍历每个子数组并得到每一列的总和。

例如

对于键为HRI的子数组:

[HRI] => 
    Array (
        [0] => Array ( [0] => 14157.72 [1] => 10157.72 )
        [1] => Array ( [0] => 39140.94 [1] => 39140.94 )
        [2] => Array ( [0] => 36383.66 [1] => 36383.66 )
        [3] => Array ( [0] => 38508.00 [1] => 38508.00 )
        [4] => Array ( [0] => 8424.00 [1] => 8424.00 )
    )

预期输出:

第 0 列: 14157.72 + 39140.94 + 36383.66 + 38508.00 + 8424.00 = ? 第 1 列: 10157.72 + 39140.94 + 36383.66 + 38508.00 + 8424.00 = ?

我当前的代码:

$amount = [];
for($o=0;$o<count($totalamount);$o++){
    print_r($totalamount[$o]['login']); 
    
    if($totalamount[$o]['login'] == $totalamount[$o]['login']){
        //$amount[$totalamount[$o]['login']] += $totalamount[$o]['piamount'];
        $piamount[$totalamount[$o]['login']][] = array_sum(array($totalamount[$o]['piamount'].','));
    }
}

如何更改我的代码以获得预期的结果?

【问题讨论】:

  • 所以你只想打印每个子数组的总和?还是要打印带有加号的数字?
  • 我需要添加每个子数组@Rizier123?

标签: php arrays loops sum transpose


【解决方案1】:

这应该适合你:

只需循环遍历数组,得到每个子数组与array_sum()的总和

foreach($arr as $k => $v)
    echo $k . " = " . array_sum($v) . "<br>";

示例输入/输出:

$arr = [
        [1,2,3],
        [4,5,6],
        [7,8,9],
    ];

输出:

0 = 6
1 = 15
2 = 24

编辑:

既然你更新了你的数组结构,就用这个:

foreach($arr as $k => $v)
    echo $k . " = " . array_sum(array_map("array_sum", $v)) . "<br>";

编辑 2:

如果您想要子数组的每个数组的总和,则必须使用两个 foreach 循环,如下所示:

foreach($arr as $k1 => $innerArray) {
    foreach($innerArray as $k2 => $v)
        echo "$k1-$k2 = " . array_sum($v) . "<br>";
    echo "<br><br>";
}

编辑 3:

我想我终于明白你想要什么了:你只想遍历每个子数组并得到子数组每一列的总和:

foreach($arr as $k1 => $innerArray) {
    foreach($innerArray[0] as $k2 => $v)
        echo "$k1-$k2 = " . array_sum(array_column($innerArray, $k2)) . "<br>";
    echo "<br><br>";
}

【讨论】:

  • 工作真棒我已经更新了我的问题如果我有像上面这样的数组如何获得我的预期输出
  • Rizer 我在上面的数组中苦苦挣扎,我该如何解决?
  • @QuestionUser 查看我的编辑!只需刷新页面并查看我的更新答案
  • HRI = 14157.72+39140.94+36383.66+ 38508.00+8424.00; HRI = 10157.72+39140.94+36383.66+ 38508.00+8424.00; 是的,我需要像这样添加子数组值 [0] 想要单独添加,[1] 想要单独添加我该怎么做?
  • @QuestionUser ^ 我该怎么办?
【解决方案2】:
$a=Array (
    'HRI'=> Array (14157.72, 39140.94 , 36383.66,38508, 8424 ),
    'RHA'=> Array (111562.5, 37880 ,  11364 ,23719.5,  26705 ),
    'PBA'=> Array (58816.26),
    'MPU'=> Array (432 )
);
$sumHRI=0;

foreach ($a['HRI'] as $key=>$value) $sumHRI+=$value;

echo "HRI=$sumHRI";

对于更新的问题:

  $a=[
    'HRI'=>[
        [14157.72, 39140.94 , 36383.66,38508, 8424],
        [14157.72, 39140.94 , 36383.66,38508, 8424],
        [14157.72, 39140.94 , 36383.66,38508, 8424],
        [14157.72, 39140.94 , 36383.66,38508, 8424],
        ],
    'RHA'=>[111562.5, 37880 ,  11364 ,23719.5,  26705 ],
    'PBA'=> [58816.26],
    'MPU'=> [432]
];

$sumArray=[];
foreach ($a as $k=>$bigArray){
    $sumArray[$k]=0;
    foreach($bigArray as $subArray) $sumArray[$k]+=array_sum($subArray);
    echo "$k={$sumArray[$k]}";
}

也就是说,如果我理解正确,并且您想要计算的总和。如果要实际打印数字和符号 +,则必须在某处添加字符串连接。

【讨论】:

  • 刚才我注意到您实际上更改了数组。我感觉你想要所有子数组的总和......你实际上想要 HRI 数组的总和?
  • 对不起 Ovidu 请检查我更新的问题,我需要上面的答案 14157.72+39140.94+36383.66+ 38508.00+8424.00 = ?检查数组值是否要单独添加第一个值和第二个值的子数组,现在它的工作方式类似于 14157.72 +10157.72 = ?
  • 我看到你更新了很多请求。当你弄清楚你到底需要什么时,我会回来尝试提供帮助。
  • 这将打印每个字符串键的总和。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2019-11-02
相关资源
最近更新 更多