ARRAY PHP

Bedah Total Array PHP — Panduan Lengkap dari Dasar hingga Advanced

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)

FungsiKegunaan
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

  1. Buat filter karyawan berdasarkan rentang gaji (min, max) dan jabatan menggunakan array_filter.
  2. Buat function groupBy untuk mengelompokkan data produk per kategori.
  3. Ekstrak semua email dari teks besar, simpan ke array unik, lalu simpan sebagai JSON.
  4. 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

Artikel dibuat untuk pembelajaran intensif

© Bedah PHP • Dibuat untuk Aang Saputra

Previous Post
No Comment
Add Comment
comment url