$row) { // $row: rank, username, score, penalty $res = [$rank + 1, $row[2][0], $row[0], $row[1]]; for ($i = 0; $i < $n_problems; $i++) { // $score[$row[2][0]][$i]: score, penalty, submission_id $res[] = isset($score[$row[2][0]][$i][0]) ? $score[$row[2][0]][$i][0] : ""; $res[] = isset($score[$row[2][0]][$i][1]) ? $score[$row[2][0]][$i][1] : ""; $res[] = isset($score[$row[2][0]][$i][2]) ? $score[$row[2][0]][$i][2] : ""; } $export_data[] = $res; } $csv = array2csv($export_data); header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate"); header("Last-Modified: {$now} GMT"); header("Content-Type: text/csv"); header("Content-Disposition: attachment;filename={$contest['id']}_standings.csv"); die($csv);