ARRAY PHP
Bedah Total Array PHP — Panduan Lengkap (Dasar → Advanced)
Panduan ini mengupas tuntas semua hal terkait array di PHP. Contoh kode siap jalan di Termux atau server lokal. Dilengkapi best practice, optimasi, dan integrasi dengan regex untuk parsing.
Ringkasan Cepat
Array di PHP adalah struktur data fleksibel yang bisa menyimpan list nilai, pasangan key→value, atau struktur nested kompleks. Di sini kamu akan belajar: semua tipe array, operasi CRUD pada array, fungsi built-in (lebih dari 80), transformasi fungsional (array_map, array_filter, array_reduce), serta trik performa dan pola desain nyata.
Jenis Array
1. Indexed Array
// Indexed array
$buah = ["apel", "jeruk", "pisang"];
echo $buah[0]; // apel
2. Associative Array
// Associative array
$user = [
'nama' => 'Aang',
'pekerjaan' => 'Driver'
];
echo $user['nama'];
3. Mixed keys
// PHP menerima campuran integer dan string key
$mixed = [0 => 'nol', '0' => 'string nol', 'a' => 'alpha'];
print_r($mixed);
4. Multidimensional Array
// Array di dalam array
$karyawan = [
['nama' => 'Aang', 'gaji' => 5000000],
['nama' => 'Budi', 'gaji' => 4000000]
];
echo $karyawan[1]['nama']; // Budi
Manipulasi Dasar (CRUD)
Tambah elemen
$arr = [1,2];
$arr[] = 3; // otomatis index berikutnya
array_push($arr, 4); // tambahkan beberapa
Ubah elemen
$user['nama'] = 'Andi';
// jika key tidak ada, otomatis dibuat
Hapus elemen
unset($arr[1]); // index 1 dihapus
// perhatikan: unset tidak re-index otomatis
$arr = array_values($arr); // reindex jika perlu
Gabung & Split
$a = [1,2]; $b = [3,4];
$c = array_merge($a,$b); // 1,2,3,4
// split (chunk)
$chunks = array_chunk(range(1,10), 3);
Looping Array — Teknik & Performa
foreach
foreach ($arr as $item) {
// akses nilai
}
// atau dengan key
foreach ($arr as $k => $v) {
// akses key dan value
}
for (ketika butuh index)
for ($i = 0, $len = count($arr); $i < $len; $i++){
echo $arr[$i];
}
Tip: simpan count($arr) ke variabel pada loop for besar untuk sedikit menghemat panggilan fungsi.
Fungsi-fungsi Penting (Referensi singkat)
| Fungsi | Kegunaan |
|---|---|
| count() | Jumlah elemen |
| in_array() | Periksa nilai ada di array |
| array_keys() | Ambil semua key |
| array_values() | Ambil semua value |
| array_merge() | Gabungkan array |
| array_diff() | Selisih antar array |
| array_intersect() | Irisan antar array |
| array_unique() | Hapus duplikat |
| array_slice() | Ambil subset |
| array_splice() | Hapus & ganti bagian array |
Masih banyak lagi fungsi (lihat array_map, array_filter, array_reduce di bagian lanjutan).
Fungsi Lanjutan (Functional Style)
array_map()
$angka = [1,2,3];
$double = array_map(fn($n) => $n * 2, $angka);
// [2,4,6]
array_filter()
$angka = [1,2,3,4];
$genap = array_filter($angka, fn($n) => $n % 2 === 0);
// Hati-hati: array_filter mempertahankan key asli
array_reduce()
$total = array_reduce([1,2,3,4], fn($carry,$i) => $carry + $i, 0);
// 10
array_column()
$nama = array_column($karyawan, 'nama');
// ambil kolom dari array of arrays
array_walk() & array_walk_recursive()
array_walk($arr, function(&$v,$k){ $v = trim($v); });
// untuk nested, gunakan array_walk_recursive
Gunakan fungsi ⟨map/filter/reduce⟩ bila kamu ingin menulis kode yang lebih deklaratif dan teruji; namun perhatikan overhead callback pada dataset sangat besar.
Array Multidimensi — Teknik Manipulasi & Query
Membaca
foreach ($table as $row) {
echo $row['id'] . ' - ' . $row['name'];
}
Filter & Sort
// filter
$hasil = array_filter($table, fn($r) => $r['score'] >= 80);
// custom sort berdasarkan kolom 'score'
usort($table, fn($a,$b) => $b['score'] <=> $a['score']);
Group by (pattern manual)
$group = [];
foreach ($items as $it) {
$group[$it['kategori']][] = $it;
}
Alternatif: gunakan collections (framework) atau helper jika bekerja dengan dataset besar.
Sorting & Kustom Sort
// sort sederhana
sort($arr); // nilai numeric / string
// urut berdasarkan key
ksort($assoc);
// kustom: usort dengan comparator
usort($users, function($a,$b){
return $a['age'] <=> $b['age'];
});
Gunakan usort (modifies array) untuk kriteria kompleks. Jika butuh stabil sort, perturbasi kecil atau gunakan algoritma eksternal.
Konversi: Array <> JSON
// Array ke JSON
$json = json_encode($arr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
// JSON ke Array
$data = json_decode($json, true);
Untuk integrasi API, selalu validasi hasil json_decode dan cek json_last_error().
Performance & Memory
- Simpan
count()di variabel jika dipakai di loop besar. - Hindari callback berlebihan pada array jutaan elemen — gunakan loop imperative bila perlu.
- Gunakan
array_chunk()untuk memproses batch besar (memory friendly). - Kapan re-index? Hanya bila benar-benar diperlukan —
unset()tidak otomatis reindex.
// Contoh memproses 10k item per batch
foreach (array_chunk($big, 1000) as $batch) {
process($batch);
}
Profiling: gunakan Xdebug atau simple memory_get_usage() untuk mengukur sebelum/selesai proses.
Pola & Best Practices
1. Gunakan descriptive keys
// lebih mudah dimengerti
$user = ['id'=>1,'name'=>'Aang','role'=>'driver'];
2. Hindari array besar tanpa struktur
Untuk dataset kompleks, pertimbangkan model object atau ORM.
3. Validasi sebelum akses key
if (isset($user['name'])) echo $user['name'];
// atau gunakan null coalescing
echo $user['name'] ?? 'n/a';
4. Gunakan helper untuk operasi berulang
function groupBy(array $items, string $key): array {
$out = [];
foreach ($items as $it) $out[$it[$key]][] = $it;
return $out;
}
Array + Regex — Parsing & Ekstraksi Data
Gabungkan kekuatan preg_match_all() dengan array untuk mengekstrak pola dari teks besar, lalu simpan hasilnya ke struktur array untuk pemrosesan lanjutan.
Contoh: ekstrak nomor HP (Indonesia) dari teks
$text = 'Kontak: 081234567890 atau +6281234567890, telepon kantor 021-7654321';
$pattern = '/(?:(?:\+62|0)8\d{8,10})/';
preg_match_all($pattern, $text, $matches);
$phones = array_unique($matches[0]);
print_r($phones);
Contoh: parsing tabel sederhana ke array
$html = '<tr><td>Aang</td><td>5000000</td></tr>';
preg_match_all('/<tr>(.*?)<\/tr>/s', $html, $rows);
$out = [];
foreach ($rows[1] as $row) {
preg_match_all('/<td>(.*?)<\/td>/s', $row, $cols);
$out[] = $cols[1];
}
print_r($out);
Catatan: untuk parsing HTML lebih kompleks, lebih aman pakai DOMDocument atau library HTML parser daripada regex, tapi regex berguna untuk ekstraksi cepat dari snippet bersih.
Cheat Sheet Singkat
// create
$a = [];
$a[] = 1;
array_push($a,2);
// read
$count = count($a);
$first = $a[0] ?? null;
// update
$a[0] = 'ubah';
// delete
unset($a[0]);
// transform
$b = array_map(fn($v) => strtoupper($v), $a);
// filter
$c = array_filter($a, fn($v) => strlen($v) > 2);
Latihan & Mini Project
- Buat filter karyawan berdasarkan rentang gaji (min, max) dan jabatan menggunakan
array_filter. - Buat function groupBy untuk mengelompokkan data produk per kategori.
- Ekstrak semua email dari teks besar, simpan ke array unik, lalu simpan sebagai JSON.
- Implementasikan pagination sederhana untuk array besar menggunakan
array_slice.
Contoh Jawaban (Latihan 3)
$text = 'Halo alice@mail.com, hubungi bob@mail.com dan alice@mail.com lagi.';
preg_match_all('/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/', $text, $m);
$emails = array_values(array_unique($m[0]));
echo json_encode($emails);
Referensi Singkat & Lanjutan
- Manual resmi PHP — (baca fungsi array di php.net)
- Regex101 — latihan regex (pilih flavor: PHP)
- Buku & artikel tentang struktur data PHP dan pola desain
