Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

PHP Dasar

Pelajaran 11 dari 15

Fungsi dan array

Misi: rekap nilai ujian satu kelas

Setelah pelajaran ini kamu bisa menelusuri program 35 baris yang memakai fungsi bertipe, array asosiatif bersarang, arsort, dan array_filter.

±17 menitDiperiksa 5 Okt 2026

Materi

Wali kelas XI IPA 2 di sebuah SMA di Yogyakarta merekap nilai tiga ujian setiap siswa. Program menghitung rata-rata per siswa, membulatkannya ke satu angka desimal dengan `round`, memberi predikat, mengurutkan dari yang tertinggi, lalu mencetak daftar siswa yang rata-ratanya 70 ke atas.

Hitung rata-rata keempat siswa lebih dulu. Nilai 0 tetap dihitung sebagai satu ujian karena count menghitung semua elemen. Perhatikan bahwa round menghasilkan float, dan float bulat dicetak echo tanpa angka desimal. arsort mengurutkan nilai dari besar ke kecil sambil menjaga nama sebagai kunci; array_filter juga menjaga kunci, sehingga array_keys menghasilkan nama. Soal terakhir mengganti arsort dengan sort; ingat apa yang dilakukan sort terhadap kunci array asosiatif, bukan hanya terhadap urutannya.

<?php
// Rekap nilai ujian kelas XI IPA 2, sebuah SMA di Yogyakarta
$nilai = [
    "Ayu" => [80, 92, 85],
    "Bima" => [60, 55, 70],
    "Citra" => [95, 88, 91],
    "Dodi" => [70, 0, 65],
];

function rataRata(array $skor): float {
    return array_sum($skor) / count($skor);
}

function predikat(float $rata): string {
    return match (true) {
        $rata >= 85 => "A",
        $rata >= 70 => "B",
        $rata >= 60 => "C",
        default => "D",
    };
}

$rekap = [];
foreach ($nilai as $nama => $skor) {
    $rekap[$nama] = round(rataRata($skor), 1);
}

arsort($rekap);
$lulus = array_filter($rekap, fn($r) => $r >= 70);

foreach ($rekap as $nama => $rata) {
    echo $nama . ": " . $rata . " (" . predikat($rata) . ")\n";
}
echo "Lulus: " . implode(", ", array_keys($lulus)) . "\n";

Latihan

0/4 lulus

Misi akhir modul: luluskan minimal 4 dari 4 tugas. Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 4

Apa baris PERTAMA keluaran program?

<?php
// Rekap nilai ujian kelas XI IPA 2, sebuah SMA di Yogyakarta
$nilai = [
    "Ayu" => [80, 92, 85],
    "Bima" => [60, 55, 70],
    "Citra" => [95, 88, 91],
    "Dodi" => [70, 0, 65],
];

function rataRata(array $skor): float {
    return array_sum($skor) / count($skor);
}

function predikat(float $rata): string {
    return match (true) {
        $rata >= 85 => "A",
        $rata >= 70 => "B",
        $rata >= 60 => "C",
        default => "D",
    };
}

$rekap = [];
foreach ($nilai as $nama => $skor) {
    $rekap[$nama] = round(rataRata($skor), 1);
}

arsort($rekap);
$lulus = array_filter($rekap, fn($r) => $r >= 70);

foreach ($rekap as $nama => $rata) {
    echo $nama . ": " . $rata . " (" . predikat($rata) . ")\n";
}
echo "Lulus: " . implode(", ", array_keys($lulus)) . "\n";
Pilih satu jawaban

Latihan 2 dari 4

Apa baris keluaran untuk Dodi?

<?php
// Rekap nilai ujian kelas XI IPA 2, sebuah SMA di Yogyakarta
$nilai = [
    "Ayu" => [80, 92, 85],
    "Bima" => [60, 55, 70],
    "Citra" => [95, 88, 91],
    "Dodi" => [70, 0, 65],
];

function rataRata(array $skor): float {
    return array_sum($skor) / count($skor);
}

function predikat(float $rata): string {
    return match (true) {
        $rata >= 85 => "A",
        $rata >= 70 => "B",
        $rata >= 60 => "C",
        default => "D",
    };
}

$rekap = [];
foreach ($nilai as $nama => $skor) {
    $rekap[$nama] = round(rataRata($skor), 1);
}

arsort($rekap);
$lulus = array_filter($rekap, fn($r) => $r >= 70);

foreach ($rekap as $nama => $rata) {
    echo $nama . ": " . $rata . " (" . predikat($rata) . ")\n";
}
echo "Lulus: " . implode(", ", array_keys($lulus)) . "\n";
Pilih satu jawaban

Latihan 3 dari 4

Apa baris terakhir keluaran program?

<?php
// Rekap nilai ujian kelas XI IPA 2, sebuah SMA di Yogyakarta
$nilai = [
    "Ayu" => [80, 92, 85],
    "Bima" => [60, 55, 70],
    "Citra" => [95, 88, 91],
    "Dodi" => [70, 0, 65],
];

function rataRata(array $skor): float {
    return array_sum($skor) / count($skor);
}

function predikat(float $rata): string {
    return match (true) {
        $rata >= 85 => "A",
        $rata >= 70 => "B",
        $rata >= 60 => "C",
        default => "D",
    };
}

$rekap = [];
foreach ($nilai as $nama => $skor) {
    $rekap[$nama] = round(rataRata($skor), 1);
}

arsort($rekap);
$lulus = array_filter($rekap, fn($r) => $r >= 70);

foreach ($rekap as $nama => $rata) {
    echo $nama . ": " . $rata . " (" . predikat($rata) . ")\n";
}
echo "Lulus: " . implode(", ", array_keys($lulus)) . "\n";
Pilih satu jawaban

Latihan 4 dari 4

Baris `arsort($rekap);` diganti `sort($rekap);`. Apa baris PERTAMA keluaran program?

<?php
// Rekap nilai ujian kelas XI IPA 2, sebuah SMA di Yogyakarta
$nilai = [
    "Ayu" => [80, 92, 85],
    "Bima" => [60, 55, 70],
    "Citra" => [95, 88, 91],
    "Dodi" => [70, 0, 65],
];

function rataRata(array $skor): float {
    return array_sum($skor) / count($skor);
}

function predikat(float $rata): string {
    return match (true) {
        $rata >= 85 => "A",
        $rata >= 70 => "B",
        $rata >= 60 => "C",
        default => "D",
    };
}

$rekap = [];
foreach ($nilai as $nama => $skor) {
    $rekap[$nama] = round(rataRata($skor), 1);
}

arsort($rekap);
$lulus = array_filter($rekap, fn($r) => $r >= 70);

foreach ($rekap as $nama => $rata) {
    echo $nama . ": " . $rata . " (" . predikat($rata) . ")\n";
}
echo "Lulus: " . implode(", ", array_keys($lulus)) . "\n";
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke