Sorting Array
Urutkan array: sort, rsort, asort, ksort, dan usort dengan fungsi pembanding sendiri.
Kenapa Sorting Penting?
Data dari database atau form jarang datang dalam urutan yang enak dilihat. Daftar produk perlu diurutkan dari termurah, ranking siswa dari nilai tertinggi, nama dari A ke Z. Sorting mengubah array acak menjadi urutan bermakna, dan PHP punya fungsi sort untuk setiap kebutuhan.
<?php
// Contoh 1: sort untuk array biasa (indeks angka)
$nama = ["Citra", "Andi", "Budi"];
sort($nama); // urut A-Z, indeks diatur ulang: [0=>"Andi", 1=>"Budi", 2=>"Citra"]
print_r($nama);
$nilai = [85, 92, 78];
rsort($nilai); // urut BESAR ke kecil: [92, 85, 78]
print_r($nilai);sort() mengurut menaik (kecil ke besar / A ke Z), rsort() ("reverse sort") mengurut menurun. Keduanya mengatur ulang indeks angka dari 0, jadi cocok untuk list biasa.
<?php
// Contoh 2: sort untuk array asosiatif (kunci harus dipertahankan!)
$siswa = ["Andi" => 85, "Citra" => 92, "Budi" => 78];
asort($siswa); // urut berdasar NILAI, kunci ikut: Budi(78), Andi(85), Citra(92)
print_r($siswa);
ksort($siswa); // urut berdasar KUNCI (nama): Andi, Budi, Citra
print_r($siswa);
// Studi kasus nyata: ranking 3 besar
arsort($siswa); // nilai besar ke kecil, kunci dipertahankan
$juara = array_slice($siswa, 0, 3, true);
foreach ($juara as $nama => $nilai) {
echo "$nama: $nilai<br>";
}Pola nama fungsinya logis: a = associative (pertahankan kunci), k = key (urut berdasar kunci), r = reverse. Jadi asort = urut nilai pertahankan kunci, arsort = kebalikannya, ksort = urut kunci. Kombinasi arsort + array_slice adalah resep standar membuat ranking.
Jebakan yang Sering Terjadi
Memakai sort() pada array asosiatif. sort($siswa) akan menghancurkan kunci "Andi", "Budi" dan menggantinya dengan 0, 1, 2. Data nama hilang selamanya. Aturan: array asosiatif wajib pakai varian a (asort, arsort, ksort).
Sort string angka vs angka. sort(["10", "9", "80"]) default mengurut sebagai string: "10", "80", "9" (karena "1" < "8" < "9"). Kalau maksudmu angka, paksa mode numerik: sort($arr, SORT_NUMERIC) menghasilkan 9, 10, 80.
Sorting Multi-Kolom
Untuk data tabel, sering butuh urut berdasar dua kolom (misalnya kelas lalu nama). array_multisort melakukannya:
<?php
$nama = ["Budi", "Andi", "Citra", "Dewi"];
$kelas = ["XII-2", "XII-1", "XII-2", "XII-1"];
// Urut berdasar kelas dulu, lalu nama
array_multisort($kelas, SORT_ASC, $nama, SORT_ASC);
foreach ($nama as $i => $n) {
echo $kelas[$i] . " - $n\n";
}
// XII-1 - Andi, XII-1 - Dewi, XII-2 - Budi, XII-2 - Citraarray_multisort mengurut beberapa array paralel sekaligus: baris-baris tetap sejajar. Alternatif modern: usort dengan callback pembanding custom untuk logika urut yang kompleks.
Catatan teknis: Semua fungsi sort mengubah array langsung (by reference) dan mengembalikan boolean, bukan array baru. Jadi
$baru = sort($lama);adalah kesalahan:$baruhanya berisitrue, sedangkan$lamayang berubah. Selalu:sort($arr);lalu pakai$arr.
Tantangan
Ranking nilai
Array $siswa berisi 4 array asosiatif (nama, nilai). Dengan usort, urutkan dari nilai tertinggi, lalu tampilkan peringkat 1-4 dengan foreach.