如何在 php foreach 循环中从 json obj 获取值

how to get values from json obj in php foreach loop

我有几个 json 文件,每个 json 文件如下所示:

{
    "id": "id_1638974137049",
    "weeknr": 48,
    "dayhours": 5,
    "tvt": 1.25
}

另一个文件:

{
    "id": "id_1638974137050",
    "weeknr": 48,
    "dayhours": 6,
    "tvt": 1.50
}

还有一个:

{
    "id": "id_1638974137023",
    "weeknr": 48,
    "dayhours": 7,
    "tvt": 1.75
}

现在我想制作一个 table 作为输出,其中 weeknrdayhourstvthours 那一周。这是我目前所拥有的:

$files = glob('data/*.json'); // all json files in array
foreach($files as $file) {
        $objs[] = json_decode(file_get_contents($file), true); // decode to php assoc array             
    }
foreach($objs as $key => $val) {
    $weeknr = $val['weeknr']; // weeknr

    $array_dayhours[$weeknr] += $val['dayhours']; // sum of all the dayhours from that week
    $array_tvthours[$weeknr] += $val['tvt']; // sum of all the tvt hours from that week
    // i dont know how to handle this further to create a new array which contains per week the dayhours and tvt hours 
}

我需要这样的输出(在 table 中):

weeknr   tot dayhours   tot tvt hours
48       18              4.5
49       20              6.5
50       24              5.5
<?php
$files = glob('data*.txt'); // all json files in array
foreach($files as $file) {
    $objs[] = json_decode(file_get_contents($file), true); // decode to php assoc array
}
$arrayResult=[];
foreach($objs as $key => $val) {
    $weeknr = $val['weeknr']; // weeknr
    if(isset($arrayResult[$weeknr]) && is_array($arrayResult[$weeknr]))  // If already exist
        $arrayResult[$weeknr]=["weeknr"=>$val['weeknr'],"dayhours"=>$arrayResult[$weeknr]["dayhours"]+$val['dayhours'], "tvt"=>$arrayResult[$weeknr]["tvt"]+$val['tvt']];
    else // for new entry
        $arrayResult[$weeknr]=["weeknr"=>$val['weeknr'],"dayhours"=>$val['dayhours'], "tvt"=>$val['tvt']];
}

您可以使用 $arrayResult 进行打印

你可以这样做

$files = glob('data/*.json'); // all json files in array
$objs = [];
//array to store all data
$weeksData = [];

foreach($files as $file) {
        $objs[] = json_decode(file_get_contents($file), true); // decode to php assoc array             
}

foreach($objs as $key => $val) {
    
    //using weeknr as array key and pushing it to weekData array
    $weeksData[$val['weeknr']] = [
        'dayhours' => ($weeksData[$val['weeknr']]['dayhours'] ?? 0)  + $val['dayhours'],
        'tvt' => ($weeksData[$val['weeknr']]['tvt'] ?? 0) + $val['tvt']
    ];
}