Membongkar dua tipe kerja sehari-hari di PHP: array indexed & associative dengan array_map/filter/reduce dan destructuring, lalu string dengan interpolation, heredoc, dan fungsi penting seperti str_contains dan mb_strlen untuk penanganan teks UTF-8 yang benar di aplikasi nyata.

Jika ada dua hal yang akan kalian temui di hampir setiap baris kode PHP, itu adalah array dan string. PHP dikenal sebagai bahasa yang "array-centric": hampir semua struktur data — request, response, konfigurasi, hasil database — datang dalam bentuk array. Sedangkan string adalah medium komunikasi dengan pengguna: HTML, JSON, log, dan pesan.
Episode ini membuat kalian mahir mengolah keduanya. Di sini kalian belajar transformasi data ala fungsional (map/filter/reduce), cara kerja destructuring yang ringkas, dan kebiasaan string yang aman untuk UTF-8 — fondasi untuk episode 11 (database), 13 (REST API), dan 17 (keamanan).
PHP array adalah ordered map — bisa dipakai sebagai list (indexed) atau dictionary (associative) sekaligus:
<?php
declare(strict_types=1);
$daftar = ["php", "laravel", "mysql"]; // indexed
$profil = [
"nama" => "Devvnull",
"role" => "admin",
"aktif" => true,
]; // associative
echo $daftar[0], "\n"; // php
echo $profil["nama"], "\n"; // DevvnullKarena map, PHP menjaga urutan elemen — properti yang membuat array cocok sebagai struktur data umum. count($array) menghitung jumlah elemen; array_keys() dan array_values() memisahkan key dan nilai.
Tiga fungsi "bread and butter" untuk mengolah koleksi:
$harga = [10000, 25000, 3000, 50000];
$sudahPajak = array_map(
fn (int $h): int => $h + (int) ($h * 0.11),
$harga
);
$murah = array_filter(
$harga,
fn (int $h): bool => $h <= 15000
);
$total = array_reduce(
$harga,
fn (int $carry, int $h): int => $carry + $h,
0
);
print_r($sudahPajak);
print_r($murah);
echo "Total: $total\n";Ingat tiga pola:
| Fungsi | Pola | Kembali |
|---|---|---|
array_map | setiap elemen → elemen baru | array berukuran sama |
array_filter | elemen lolos kondisi | array menyusut |
array_reduce | akumulasi semua elemen | satu nilai |
Fungsi lain yang sering dipakai: array_merge, array_combine, array_unique, sort/usort, array_search, dan in_array.
PHP mendukung destructuring array dengan sintaks pendek [...]:
[$nama, $role] = ["Devvnull", "admin"];
$profil = ["nama" => "Devvnull", "role" => "admin"];
["nama" => $n, "role" => $r] = $profil;
echo "$nama / $role\n";
echo "$n / $r\n";Spread operator ... menggabungkan array atau melempar ke variadic (episode 5):
$awal = [1, 2];
$akhir = [3, 4];
$gabung = [...$awal, ...$akhir]; // [1, 2, 3, 4]Destructuring sangat praktis saat mengambil beberapa baris dari hasil query database (episode 11) atau response API (episode 13).
Warning
Jangan gunakan array_map untuk iterasi dengan efek samping (seperti mencetak). Untuk itu gunakan foreach biasa — array_map harus murni transformasi data. Penyalahgunaan ini membuat kode sulit dibaca dan error sulit ditelusuri.
String double-quoted melakukan interpolation variabel:
$nama = "Devvnull";
$versi = "8.5";
echo "Halo $nama, kita pakai PHP $versi\n";
echo 'Halo $nama, PHP literal $versi\n'; // single-quote: literal
echo $nama . " versi " . $versi . "\n"; // concatenationDalam double-quote, gunakan kurung kurawal bila perlu memisahkan variabel dari teks berikutnya: "{$nama}s" menghasilkan Devvnuls. Ingat: di luar kode blok, kurung kurawal harus dibungkus backtick agar tidak dianggap JSX/MDX.
Untuk teks panjang, heredoc (<<<EOT) memungkinkan interpolation, nowdoc (<<<'EOT') tidak:
$nama = "Devvnull";
$intro = <<<TXT
Halo $nama,
Selamat datang di series Belajar PHP.
TXT;
$literal = <<<'TXT'
Halo $nama — baris ini tidak diinterpolasi.
TXT;
echo $intro, "\n", $literal, "\n";Heredoc sangat berguna untuk membangun body email, SQL, atau template multi-baris.
$kalimat = "Belajar PHP itu menyenangkan";
var_dump(str_contains($kalimat, "PHP")); // true (PHP 8+)
var_dump(str_starts_with($kalimat, "Belajar")); // true
var_dump(str_ends_with($kalimat, "kan")); // true
echo str_replace("PHP", "Go", $kalimat), "\n";
echo strtoupper($kalimat), "\n";
echo substr($kalimat, 0, 10), "\n"; // Belajar PHstr_contains (PHP 8.0+) menggantikan pola strpos() !== false yang mudah salah.
Fungsi seperti strlen, substr, dan strtolower menghitung per byte, bukan per karakter. Untuk bahasa Indonesia (plus emoji dan aksara lain), selalu gunakan varian mb_*:
$teks = "Sate Ayam 🍢";
echo strlen($teks), "\n"; // jumlah byte (lebih besar)
echo mb_strlen($teks), "\n"; // 10 karakter
echo mb_substr($teks, 0, 4), "\n"; // "Sate"
echo mb_strtoupper("naik", "UTF-8"), "\n"; // "NAIK"Fungsi mb_* membutuhkan ekstensi mbstring (sudah kita verifikasi di episode 0). Aturan praktis: jika data berasal dari user atau database, anggap UTF-8 dan gunakan mb_*.
== — gunakan === atau (int) untuk membandingkan dengan angka.array_map dengan multi-array — kunci berubah jadi numeric; periksa dokumentasi bila argumen lebih dari satu array.substr memotong di tengah karakter multibyte — hasilkan teks rusak; pakai mb_substr.json_encode — array indexed jadi array JSON, associative jadi object; ini penting di episode 13.Inti yang harus dibawa pulang:
array_map/array_filter/array_reduce sebagai pola transformasi standar.[...] dan spread untuk kode yang ringkas.str_contains untuk pencarian, dan mb_* untuk teks UTF-8.Di episode 7 selanjutnya kita masuk paradigma Object-Oriented Programming — class, visibility, constructor property promotion, readonly, lalu inheritance, interface, abstract class, trait, dan enum. Ini gerbang menuju kode PHP yang terstruktur dan siap untuk framework seperti Laravel.