Grouping data by week and user in a year

Viewed 27

Array

{"dev_name":"Alexandria","completed":"7","date":"2022-01-03"}
{"dev_name":"Alexandria","completed":"6","date":"2022-01-04"}
{"dev_name":"Alexandria","completed":"3","date":"2022-01-05"}
{"dev_name":"Bo","completed":"13","date":"2022-01-04"}
{"dev_name":"Bo","completed":"14","date":"2022-01-05"}
{"dev_name":"Charlie","completed":"12","date":"2022-01-03"}
{"dev_name":"Charlie","completed":"17","date":"2022-01-04"}
control_current_year_ticket_total = array();
$byWeek = array();  
$sum = 0;
foreach ($best_day as $day) {
    $date = DateTime::createFromFormat('Y-m-d', $day['date']);

    $init_date = $date->format("Y-m-d");
    $n = strtotime($init_date);
    $week = week_number($n);

    $comp = $day['daily_completed'];
    $dev = $day['dev_name'];

    $sum += $day[ 'daily_completed' ];
    
    if (!isset($byWeek[$week][$dev]) || $completed > $byWeek[$dev][$week][$dev][1]) {
        $byWeek[$week][$dev] = [
            $sum 
        ];
    }
}

I created a var to get the total of completed values for each developer in a week. This is the result I get, it's supposed to be Alexandria: 16, Bo: 27, Charlie: 29

{"2":{"Alexandria":[7],"Bo":[29],"Charlie":[55]}}
1 Answers
control_current_year_ticket_total = array();
$byWeek = array();  
$sum = 0;
foreach ($best_day as $day) {
    $date = DateTime::createFromFormat('Y-m-d', $day['date']);

    $init_date = $date->format("Y-m-d");
    $n = strtotime($init_date);
    $week = week_number($n);

    $comp = $day['daily_completed'];
    $dev = $day['dev_name'];

    $sum += $day[ 'daily_completed' ];
    
    if (!isset($byWeek[$week][$dev]) || $completed > $byWeek[$dev][$week][$dev][1]) {
        $byWeek[$week][$dev] = [
            $sum 
        ];
    }
}

change the end array $byWeek[$week][$dev] = [$sum]; to $byWeek[$week][$dev] = $sum; without the bracket

control_current_year_ticket_total = array();
$byWeek = array();  
$sum = 0;
foreach ($best_day as $day) {
    $date = DateTime::createFromFormat('Y-m-d', $day['date']);

    $init_date = $date->format("Y-m-d");
    $n = strtotime($init_date);
    $week = week_number($n);

    $comp = $day['daily_completed'];
    $dev = $day['dev_name'];

    $sum += $day[ 'daily_completed' ];
    
    if (!isset($byWeek[$week][$dev]) || $completed > $byWeek[$dev][$week][$dev][1]) {
        $byWeek[$week][$dev] = $sum ;
    }
}

like the comment said, if the data came from database, use SQL to directly group the data by week

Related