Array Lanjutan — PHP

PHP punya fungsi array yang powerful untuk transformasi data. array_map — transformasi setiap elemen: $angka = [1, 2, 3, 4, 5]; $kuadrat = array_map(fn($n) =>…

Di pelajaran Array kamu menyimpan dan membaca isi array. Di sini kita mengolah seluruh isinya sekaligus dengan fungsi bawaan PHP: menyaring, mengubah, meringkas, dan mengurutkan. Bayangin Bu Tini memegang setumpuk kartu harga menu. Dia memisahkan yang murah (menyaring), menulis harga baru di tiap kartu setelah ditambah ongkos bungkus (mengubah), menjumlahkan semuanya (meringkas), lalu menyusunnya dari yang termurah (mengurutkan). Tiap fungsi bawaan menerima satu fungsi kecil, callback, yang bilang apa yang dilakukan ke satu isi. Fungsi bawaannya yang mengulang ke semua isi. Callback-nya biasanya arrow function fn($h) => ... dari pelajaran Fungsi.

🧪 Tebakan cepat: Dari $harga = [15000, 12000, 5000, 2000, 7000], kamu menyaring yang di bawah 10.000 ke $murah, lalu menulis echo $murah[0] ?? "kosong";. Yang tercetak 5000 atau kosong? Tebak dulu, jawabannya ada di bagian "array_filter: saring, key-nya tetap".

array_filter: saring, key-nya tetap

<?php
$harga = [15000, 12000, 5000, 2000, 7000];

$murah = array_filter($harga, fn($h) => $h < 10000);
print_r($murah);
Array
(
    [2] => 5000
    [3] => 2000
    [4] => 7000
)

array_map: ubah tiap isi

<?php
$harga = [15000, 12000, 5000];

$bungkus = array_map(fn($h) => $h + 1000, $harga);
print_r($bungkus);
Array
(
    [0] => 16000
    [1] => 13000
    [2] => 6000
)

Saring lalu ubah bisa digabung: array_map(fn($n) => $n * 2, array_filter($angka, fn($n) => $n > 4)). Dari [3, 7, 2, 9, 1, 5, 8] hasilnya [1] => 14, [3] => 18, [5] => 10, [6] => 16: key dari array_filter ikut terbawa.

array_reduce dan array_sum: ringkas jadi satu nilai

<?php
$harga = [15000, 12000, 5000];

$total = array_reduce($harga, fn($carry, $h) => $carry + $h, 0);
echo $total . "\n";     // 32000
echo array_sum($harga); // 32000

Mengurutkan: sort dan usort

<?php
$harga = [15000, 2000, 7000];
sort($harga);
echo $harga[0]; // 2000

sort mengurutkan dari kecil ke besar dan mengubah array aslinya. Dia gak mengembalikan array baru, cuma true, jadi $urut = sort($harga); berisi true.

Untuk daftar berisi baris (array di dalam array), pakai usort dengan callback pembanding:

<?php
$menu = [
    ["nama" => "Nasi Goreng", "harga" => 15000],
    ["nama" => "Es Teh", "harga" => 5000],
    ["nama" => "Mie Ayam", "harga" => 12000],
];

usort($menu, fn($a, $b) => $a["harga"] <=> $b["harga"]);
echo $menu[0]["nama"]; // Es Teh

📌 array_column dan spread

$hargaPerNama = array_column($menu, "harga", "nama");
// ["Es Teh" => 5000, "Mie Ayam" => 12000, "Nasi Goreng" => 15000]

$makanan = ["Nasi Goreng", "Mie Ayam"];
$minuman = ["Es Teh", "Es Jeruk"];
$semua = [...$makanan, ...$minuman]; // 4 menu dalam satu array

array_column mengambil satu kolom dari tiap baris, dan argumen ketiganya menjadikan kolom lain sebagai key. ... (spread) menuang isi array ke array baru.

⚠️ Jebakan yang sering ketemu

TL;DR: array_filter($array, fn($x) => syarat) menyimpan isi yang lolos dan mempertahankan key lamanya (rapikan dengan array_values). array_map(fn($x) => nilaiBaru, $array) mengubah tiap isi, callback-nya di depan. array_reduce($array, fn($carry, $x) => ..., 0) meringkas jadi satu nilai, dan array_sum menjumlahkan langsung. sort mengubah array aslinya dan mengembalikan true; usort($array, fn($a, $b) => $a <=> $b) mengurutkan dengan pembanding. Simpan hasil array_filter dan array_map ke variabel.

Yang akan kamu pelajari