Transformasi Array dengan array_map
Ubah setiap isi array sekaligus dengan array_map, tanpa loop manual.
Kenapa array_map Ada?
Pola yang sangat umum: "punya array, ingin versi transformasinya". Harga dalam rupiah jadi teks "Rp15.000", nama jadi huruf kapital semua, skor jadi predikat. Tanpa array_map, kamu menulis loop + array penampung setiap kali. Dengan array_map, satu baris: beri array dan fungsi transformasi, terima array baru.
<?php
// Contoh 1: transformasi sederhana
$harga = [15000, 8000, 12000];
$label = array_map(
fn($h) => "Rp" . number_format($h),
$harga
);
print_r($label); // ["Rp15.000", "Rp8.000", "Rp12.000"]
// $harga ASLI tidak berubah: array_map mengembalikan array BARUArrow function fn($h) => ... adalah transformasinya: dipanggil sekali untuk setiap isi, hasilnya dikumpulkan menjadi array baru. Array asli tidak disentuh (immutable style), sehingga aman dipakai ulang.
<?php
// Contoh 2: banyak array sekaligus + studi kasus nilai
$nama = ["Andi", "Budi", "Citra"];
$nilai = [85, 92, 78];
// array_map bisa menerima BANYAK array: callback menerima satu item dari tiap array
$baris = array_map(
fn($n, $s) => "$n: $s",
$nama, $nilai
);
print_r($baris); // ["Andi: 85", "Budi: 92", "Citra: 78"]
// Studi kasus: ubah skor mentah jadi predikat
$predikat = array_map(
fn($s) => $s >= 90 ? "A" : ($s >= 75 ? "B" : "C"),
$nilai
);
print_r($predikat); // ["B", "A", "B"]Saat memakai banyak array, semuanya harus punya jumlah isi sama; kalau beda, yang pendek menentukan (sisanya diabaikan).
Jebakan yang Sering Terjadi
Mengharapkan kunci asosiatif dipertahankan. array_map pada array asosiatif mengembalikan array berindeks angka, kunci string hilang! Untuk transformasi yang mempertahankan kunci, pakai foreach atau kombinasikan dengan array_combine(array_keys($arr), array_map(...)).
Memakai array_map hanya untuk efek samping. Kalau callback-mu tidak mengembalikan nilai bermakna (misalnya hanya echo), kamu menyalahgunakan array_map: hasilnya array berisi null. Untuk aksi per item tanpa hasil, foreach adalah alat yang benar.
Map vs Foreach: Mana?
Gunakan array_map saat: transformasi 1-ke-1 murni, tidak butuh kondisi, hasilnya array baru. Gunakan foreach saat: butuh break/continue, transformasi bersyarat kompleks, atau membangun struktur non-array.
<?php
// Kasus yang tetap butuh foreach (kondisional):
$nilai = [85, 92, 40, 78];
$hasil = [];
foreach ($nilai as $n) {
if ($n < 50) continue; // lewati yang tidak valid
$hasil[] = $n >= 75 ? "Lulus" : "Remidi";
}
print_r($hasil);array_map tidak punya continue: callback harus mengembalikan sesuatu untuk tiap item. Kalau logikanya "kadang lewati", foreach atau kombinasi array_filter + array_map lebih tepat.
Catatan teknis: Tiga serangkai transformasi fungsional:
array_map(ubah tiap item),array_filter(saring item),array_reduce(lebur jadi satu nilai). Kuasai ketiganya dan sebagian besar olah data tidak butuh loop manual lagi.
Tantangan
Katalog harga rapi
Diberi array harga [25000, 17500, 30000], gunakan array_map untuk menghasilkan array string dengan format "Rp25.000,-" untuk tiap harga. Tampilkan hasilnya dengan print_r.