typestar

grade_report.php in PHP

Per-student averages, letter grades, and a class summary table.

<?php
// grade_report: per-student averages and a class summary

$scores = [
    "Ada"    => [92, 88, 95],
    "Grace"  => [79, 85, 91],
    "Alan"   => [88, 72, 80],
    "Edsger" => [96, 90, 98],
];

function letter(float $avg): string {
    return match (true) {
        $avg >= 90 => "A",
        $avg >= 80 => "B",
        $avg >= 70 => "C",
        default    => "F",
    };
}

$averages = [];
foreach ($scores as $name => $marks) {
    $averages[$name] = array_sum($marks) / count($marks);
}
arsort($averages);

echo str_pad("student", 10), str_pad("avg", 8), "grade\n";
foreach ($averages as $name => $avg) {
    printf("%-10s%-8.1f%s\n", $name, $avg, letter($avg));
}

$classAvg = array_sum($averages) / count($averages);
printf("class average: %.1f\n", $classAvg);
echo "top student: ", array_key_first($averages), "\n";

How it works

  1. Each student maps to an array of scores; array_sum averages them.
  2. match (true) converts an average into a letter grade.
  3. arsort orders students best-first; printf aligns the columns.
  4. array_key_first names the top student after the sort.

Keywords and builtins used here

The run, in numbers

Lines
33
Characters to type
765
Tokens
208
Three-star pace
85 tpm

At the three-star pace of 85 tokens a minute, this run takes about 147 seconds.

Type this snippet

Step 2 of 3 in Encore, step 26 of 27 in Language basics.

← Previous Next →