PHP Foreach区分值,将值求和,分组并在回显时显示它

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

我有一个数组json数据,我想对值求和,并在echo上以不同的方式显示它,我已经阅读了与此相关的另一个线程,但无法根据我的情况弄清楚。

JSON:

{
    "perusahaan": {
        "nomorLaporan": "blabla",
        "posisiDataTerakhir": "201912",
        "tanggalPermintaan": "blabla",
        "fasilitas": {
            "suratBerharga": [],
            "kreditPembiayan": [
                {
                    "ljk": "510",
                    "ljkKet": "BANK NATIONALNOBU",
                    "jumlahHariTunggakan": "0",
                    "nilaiProyek": "20000000000",
                    "plafonAwal": "20000000000",
                    "plafon": "20000000000"
                },
                {
                    "ljk": "503",
                    "ljkKet": "BANK NATIONALNOBU",
                    "jumlahHariTunggakan": "0",
                    "nilaiProyek": "15000000000",
                    "plafonAwal": "15000000000",
                    "plafon": "15000000000"
                },
                {
                    "ljk": "563",
                    "ljkKet": "BCA",
                    "jumlahHariTunggakan": "0",
                    "nilaiProyek": "15000000000",
                    "plafonAwal": "15000000000",
                    "plafon": "15000000000"
                },
                {
                    "ljk": "509",
                     "ljkKet": "BCA",
                      "jumlahHariTunggakan": "0",
                      "nilaiProyek": "15000000000",
                      "plafonAwal": "15000000000",
                     "plafon": "15000000000"
                 }
            ]
        }
    }
}

PHP:

$summedvalueshere=0;
$string = file_get_contents('ideb/NPWP.txt');
$json_a = json_decode($string, TRUE);
 foreach ($mainjson['perusahaan']['fasilitas']['kreditPembiayan'] as $v) {
 $summedvalueshere+=$v['plafonAwal'];
 echo $v['ljkKet']." = ".$summedvalueshere;
}

但显示:

BANK NATIONALNOBU = 20000000000
BANK NATIONALNOBU = 35000000000
BCA = 50000000000
BCA = 65000000000

我期望:

BANK NATIONALNOBU = 35000000000

BCA = 30000000000

任何想法如何解决?预先感谢..

php arrays json foreach
1个回答
0
投票

您可以这样操作:

$string = file_get_contents('ideb/NPWP.txt');    
$mainjson = json_decode($string, TRUE);

//create an array to store the total values
$value_array = array(); 

//go over each item in the json
foreach ($mainjson['perusahaan']['fasilitas']['kreditPembiayan'] as $v) {

        //if an item with same name has been found add this value to it
    if(array_key_exists($v['ljkKet'], $value_array)){ 
        $value_array[$v['ljkKet']] += $v['plafonAwal'];
    }else{
        //else creat a new element in the array with current value

        $value_array[$v['ljkKet']] = $v['plafonAwal'];
    }

}
// display the results
// for each item in value array
foreach($value_array as $key => $value){
    // print the name and the value
    echo $key.' = '.$value.'<br>';
}

基本上创建另一个存储值的数组,并在找到更多值时添加它们。然后遍历数组并回显结果。我厌倦了发表评论以帮助您更好地理解它。如果您有任何问题,请通知我。


编辑:

回答您的评论。您可以将功能拆分为不同的功能,然后为不同的值调用它们。参见下面的代码:

$string = file_get_contents('ideb/NPWP.txt');        
$mainjson = json_decode($string, TRUE);

//setting main json path to branch_array, easyier to read.
$branch_array = $mainjson['perusahaan']['fasilitas']['kreditPembiayan'];

//sum the differnt values
//plafonAwal
$plafonAwal_array = sum_data($branch_array, 'plafonAwal'); 
//nilaiProyek
$nilaiProyek_array = sum_data($branch_array, 'nilaiProyek'); 
//jumlahHariTunggakan
$jumlahHariTunggakan_array = sum_data($branch_array, 'jumlahHariTunggakan'); 


//print the results
print_results($plafonAwal_array, 'plafonAwal');
echo '<br>';
print_results($nilaiProyek_array, 'nilaiProyek');
echo '<br>';
print_results($jumlahHariTunggakan_array, 'jumlahHariTunggakan');


// --- FUNCTIONS --- //
//add the values of specified key
function sum_data($data_array, $key_name){
    $value_array =array();

    foreach ($data_array as $v) {

        if(array_key_exists($v['ljkKet'], $value_array)){
            $value_array[$v['ljkKet']] += $v[$key_name];
        }else{

            $value_array[$v['ljkKet']] = $v[$key_name];
        }

    }

    return $value_array;
}

//function prints results of sums with a custom heading
function print_results($result_array, $heading=''){

    // if there is a heading print it out
    if($heading!=''){
        echo $heading.':<br>';
    }

    // display the results
    // for each item in $result_array
    foreach($result_array as $key => $value){

        echo $key.' = '.$value.'<br>';
    }

}

我将功能分解为2个不同的功能,其中1添加了值,另一个则将其打印出来。


0
投票

您可以这样操作:

$string = file_get_contents('ideb/NPWP.txt');    
$mainjson = json_decode($string, TRUE);

//create an array to store the total values
$value_array = array(); 

//go over each item in the json
foreach ($mainjson['perusahaan']['fasilitas']['kreditPembiayan'] as $v) {

        //if an item with same name has been found add this value to it
    if(array_key_exists($v['ljkKet'], $value_array)){ 
        $value_array[$v['ljkKet']] += $v['plafonAwal'];
    }else{
        //else creat a new element in the array with current value

        $value_array[$v['ljkKet']] = $v['plafonAwal'];
    }



}
// display the results
// for each item in value array
foreach($value_array as $key => $value){
    // print the name and the value
    echo $key.' = '.$value.'<br>';
}

基本上创建另一个存储值的数组,并在找到更多值时添加它们。然后遍历数组并回显结果。我厌倦了发表评论以帮助您更好地理解它。如果您有任何问题,请通知我。

© www.soinside.com 2019 - 2024. All rights reserved.