arrayfungsitransformasiMenengah3 mnt baca

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
<?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 BARU

Arrow 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
<?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
<?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.