如何对键“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);
你可以试试这个
数组:
$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
我们将多维数组视为$array。
您只需要在这里使用嵌套循环即可。
试试这个:
$sum = 0;
foreach ($array as $arr) {
foreach ($arr as $a) {
$sum += $a['NILAI_ANGGARAN'];
}
}
echo $sum;
希望这有帮助。
平安! xD
您还需要检查索引为
'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);
您可以使用高级 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
使用此代码:
$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%有效:)
首先,我将提供一个脚本来完成您的编码尝试预期的任务。因为第一级键是数字字符串,所以通过“扩展和合并”技术将 3 级结构扁平化为 2 级结构是安全的。这不会破坏第三层中的键,后续将在第三层中执行阵列列隔离。
在临时二维数组上使用
array_column()
将避免检查每行中是否存在给定列。最后,在 array_sum()
的 1d 返回数组上使用 array_column*)
。
代码:(演示)
var_export(
array_sum(
array_column(
array_merge(...$array),
'NILAI_ANGGARAN'
)
)
);
// 26000000
如果您的实际意图是累积最深级别的所有列的总计,则展平数组(如上所述),然后对每列数据迭代调用
array_sum()
。
代码:(演示)
var_export(
array_map(
fn(...$col) => array_sum($col),
...array_merge(...$array)
)
);
array (
0 => 26000000,
1 => 2500000,
2 => 0,
3 => 0,
4 => 0,
5 => 500000,
6 => 450000,
7 => 300000,
8 => 0,
9 => 0,
10 => 26250000,
)
要保留结果中的列名称,最简单的方法可能是使用嵌套循环,将列名称用作结果中的关联键,并确保始终有一个值可将当前迭代的值添加到其中。
代码:(演示)
$result = [];
foreach ($array as $set) {
foreach ($set as $row) {
foreach ($row as $k => $v) {
$result[$k] = ($result[$k] ?? 0) + $v;
}
}
}
var_export($result);
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,
)