php - 如何对多维数组的值求和

问题描述 投票:0回答:6

如何对键“NILAI_ANGGARAN”的值求和?请注意,NILAI_ANGGARAN 密钥是动态的。

数组:

[1350] => Array
    (
        [495] => Array
            (
                [NILAI_ANGGARAN] => 11000000
                [NILAI_PPN] => 1000000
                [PFK] => 0
                [TAPERUM] => 0
                [LAIN_LAIN] => 0
                [NILAI_PPH21] => 500000
                [NILAI_PPH22] => 0
                [NILAI_PPH23] => 0
                [NILAI_PPH4_2] => 0
                [DENDA] => 0
                [NILAI_BERSIH] => 10500000
            )

    )

[1300] => Array
    (
        [488] => Array
            (
                [NILAI_ANGGARAN] => 15000000
                [NILAI_PPN] => 1500000
                [PFK] => 0
                [TAPERUM] => 0
                [LAIN_LAIN] => 0
                [NILAI_PPH21] => 0
                [NILAI_PPH22] => 450000
                [NILAI_PPH23] => 300000
                [NILAI_PPH4_2] => 0
                [DENDA] => 0
                [NILAI_BERSIH] => 15750000
            )

    )

我已经尝试了如何对同一键的数组的值求和?的解决方案,但出现了此错误。

Undefined offset: 1350

更新: 这就是我想要的结果:

Array 
(
    [NILAI_ANGGARAN] => 26000000
    [NILAI_PPN] => 2500000
    [PFK] => 0
    [TAPERUM] => 0
    [LAIN_LAIN] => 0
    [NILAI_PPH21] => 500000
    [NILAI_PPH22] => 450000
    [NILAI_PPH23] => 300000
    [NILAI_PPH4_2] => 0
    [DENDA] => 0
    [NILAI_BERSIH] => 26250000
)

这是我使用的代码:

$bruto = array();
foreach($array as $data => $key) {
    foreach($key as $k => $value) {
         foreach($value as $v => $isi) {
              $bruto[$k]+=$value;
         }
    }
}
print_r($bruto);

任何人都可以帮我提供其他解决方案吗?

谢谢

php arrays multidimensional-array sum
6个回答
1
投票

你可以试试这个

数组:

$multi_dimentional_array = array (
'1350' => array
    (
        '495' => array
            (
                'NILAI_ANGGARAN' => 11000000,
                'NILAI_PPN' => 1000000,
                'PFK' => 0,
                'TAPERUM' => 0,
                'LAIN_LAIN' => 0,
                'NILAI_PPH21' => 500000,
                'NILAI_PPH22' => 0,
                'NILAI_PPH23' => 0,
                'NILAI_PPH4_2' => 0,
                'DENDA' => 0,
                'NILAI_BERSIH' => 10500000
            )

    ),
'1300' => array
    (
        '488' => array
            (
                'NILAI_ANGGARAN' => 15000000,
                'NILAI_PPN' => 1500000,
                'PFK' => 0,
                'TAPERUM' => 0,
                'LAIN_LAIN' => 0,
                'NILAI_PPH21' => 0,
                'NILAI_PPH22' => 450000,
                'NILAI_PPH23' => 300000,
                'NILAI_PPH4_2' => 0,
                'DENDA' => 0,
                'NILAI_BERSIH' => 15750000
            )

    )
 );

获取键“NILAI_ANGGARAN”的总和值代码:

$NILAI_ANGGARAN_TOTAL = 0;
foreach( $multi_dimentional_array as $fkey=>$smarray )
{
    foreach ($smarray as $skey => $value) {
        // Empty check 
        if ( !empty( $value['NILAI_ANGGARAN'] ) ){
            $NILAI_ANGGARAN_TOTAL += $value['NILAI_ANGGARAN'];
        }       
    }

}
echo "Sum of NILAI_ANGGARAN is :{$NILAI_ANGGARAN_TOTAL}";

结果:

Sum of NILAI_ANGGARAN is :26000000


0
投票

我们将多维数组视为$array。

您只需要在这里使用嵌套循环即可。

试试这个:

$sum = 0;

foreach ($array as $arr) {

    foreach ($arr as $a) {

        $sum += $a['NILAI_ANGGARAN'];
    }
}

echo $sum;

希望这有帮助。

平安! xD


0
投票

您还需要检查索引为

'NILAI_ANGGARAN'
的值是否存在,否则PHP会显示未定义的偏移错误!

<?php
$array = array (
'1350' => array
    (
        '495' => array
            (
                'NILAI_ANGGARAN' => 11000000,
                'NILAI_PPN' => 1000000,
                'PFK' => 0,
                'TAPERUM' => 0,
                'LAIN_LAIN' => 0,
                'NILAI_PPH21' => 500000,
                'NILAI_PPH22' => 0,
                'NILAI_PPH23' => 0,
                'NILAI_PPH4_2' => 0,
                'DENDA' => 0,
                'NILAI_BERSIH' => 10500000
            )

    ),
'1300' => array
    (
        '488' => array
            (
                'NILAI_ANGGARAN' => 15000000,
                'NILAI_PPN' => 1500000,
                'PFK' => 0,
                'TAPERUM' => 0,
                'LAIN_LAIN' => 0,
                'NILAI_PPH21' => 0,
                'NILAI_PPH22' => 450000,
                'NILAI_PPH23' => 300000,
                'NILAI_PPH4_2' => 0,
                'DENDA' => 0,
                'NILAI_BERSIH' => 15750000
            )

    )
 );


$sum = 0;
foreach($array as $key => $subarray)
{
    foreach($subarray as $subsubarrray)
    {
        if(isset($subsubarrray['NILAI_ANGGARAN'])) //check if isset
            $sum += $subsubarrray['NILAI_ANGGARAN'];
    }
}

var_dump($sum);

0
投票

您可以使用高级 php 来实现相同的目的。使用

RecursiveArrayIterator
RecursiveIteratorIterator
可以轻松完成:

$multi_dimentional_array = array (
    '1350' => array
    (
        '495' => array
        (
            'NILAI_ANGGARAN' => 11000000,
            'NILAI_PPN' => 1000000,
            'PFK' => 0,
            'TAPERUM' => 0,
            'LAIN_LAIN' => 0,
            'NILAI_PPH21' => 500000,
            'NILAI_PPH22' => 0,
            'NILAI_PPH23' => 0,
            'NILAI_PPH4_2' => 0,
            'DENDA' => 0,
            'NILAI_BERSIH' => 10500000
        )

    ),
    '1300' => array
    (
        '488' => array
        (
            'NILAI_ANGGARAN' => 15000000,
            'NILAI_PPN' => 1500000,
            'PFK' => 0,
            'TAPERUM' => 0,
            'LAIN_LAIN' => 0,
            'NILAI_PPH21' => 0,
            'NILAI_PPH22' => 450000,
            'NILAI_PPH23' => 300000,
            'NILAI_PPH4_2' => 0,
            'DENDA' => 0,
            'NILAI_BERSIH' => 15750000
        )

    )
);

$sum = 0;
$k_value = 'NILAI_ANGGARAN';
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($multi_dimentional_array));

foreach ($iterator as $key => $value) {
    if($key == $k_value){
        $sum +=$value;
    }
}


echo "SUM of $k_value is $sum";

输出

SUM of NILAI_ANGGARAN is 26000000

0
投票

使用此代码:

$sum_arr = array();
foreach($main as $m_item){
    foreach($sub as $s_item){
        foreach($s_item as $skey => $value){
            $sum_arr[$skey] += $value;
        }
    }
}

使用此代码,它将在

$sum_arr
中是所有元素的数组,并且它也是数组格式 试试这个,100%有效:)


0
投票

因为第一级键是数字字符串,所以通过“扩展和合并”技术将 3 级结构扁平化为 2 级结构是安全的。这不会破坏第三层中的键,后续将在第三层中执行阵列列隔离。

在临时二维数组上使用

array_column()
将避免检查每行中是否存在给定列。最后,在
array_sum()
的 1d 返回数组上使用
array_column*)

代码:(演示

var_export(
    array_sum(
        array_column(
            array_merge(...$array),
            'NILAI_ANGGARAN'
        )
    )
);
// 26000000
© www.soinside.com 2019 - 2024. All rights reserved.