PHP Arrays dan Common Array Operations
Array di PHP adalah struktur data serbaguna yang bisa dipakai sebagai daftar berurutan, kamus key-value, atau kombinasi keduanya. Karena fleksibel, array sering jadi pilihan default untuk menampung data hasil query, payload API, konfigurasi, sampai hasil transformasi sementara.
Bagian ini merangkum bentuk array yang paling sering dipakai dan operasi umum yang perlu dikuasai supaya manipulasi data tetap rapi dan tidak bikin bug yang sulit dilacak.
Definisi singkat
Secara sederhana, array adalah kumpulan nilai yang diakses lewat indeks atau key.
Di PHP, array tidak dibatasi hanya untuk data numerik. Satu array bisa berisi:
- indexed array: key numerik berurutan atau otomatis
- associative array: key berupa string atau key yang bermakna
- nested array: array di dalam array
PHP juga memperlakukan array sebagai ordered map. Artinya, urutan elemen tetap dipertahankan, walaupun key-nya asosiatif.
Indexed array
Indexed array cocok untuk data yang sifatnya daftar.
$fruits = ['apel', 'pisang', 'mangga'];
echo $fruits[0]; // apelCiri utamanya:
- key biasanya angka mulai dari
0 - cocok untuk koleksi yang urutannya penting
- sering dipakai untuk list item, tag, id, atau hasil iterasi
Contoh lain:
$ids = [101, 102, 103];Kalau elemen ditambahkan tanpa key eksplisit, PHP akan memberi key berikutnya secara otomatis.
$numbers = [];
$numbers[] = 10;
$numbers[] = 20;
$numbers[] = 30;Associative array
Associative array dipakai saat tiap nilai punya label yang jelas.
$user = [
'name' => 'Alya',
'email' => 'alya@example.com',
'role' => 'admin',
];
echo $user['email']; // alya@example.comCiri utamanya:
- key berupa string atau key yang bermakna
- cocok untuk data record, konfigurasi, dan payload struktur
- aksesnya lebih ekspresif daripada indexed array biasa
Pola ini umum untuk data seperti:
- detail user
- setting aplikasi
- hasil decode JSON
- row data dari API atau database
Nested array
Nested array adalah array yang isinya array lagi.
$users = [
[
'name' => 'Alya',
'skills' => ['PHP', 'Laravel'],
],
[
'name' => 'Bima',
'skills' => ['JavaScript', 'React'],
],
];
echo $users[0]['skills'][1]; // LaravelNested array sering muncul ketika data punya banyak lapisan, misalnya:
- daftar produk dengan variasi
- response API bertingkat
- struktur menu
- hasil grouping
Kalau struktur mulai dalam, usahakan beri nama variabel yang jelas. Yang bikin nested array berantakan biasanya bukan kedalamannya, tapi nama key yang kabur.
Alur transformasi data
Saat memanipulasi array, biasanya alurnya begini: ambil data, saring, ubah bentuk, lalu gabungkan hasil.
Pola ini membantu kalau Anda ingin membaca transformasi data sebagai pipeline, bukan sebagai deretan loop manual.
Fungsi penting
array_map()
array_map() dipakai untuk menerapkan callback ke setiap elemen array.
$prices = [10000, 25000, 40000];
$withTax = array_map(fn ($price) => $price * 1.11, $prices);Kapan dipakai:
- mengubah setiap elemen dengan aturan yang sama
- normalisasi data
- formatting nilai sebelum ditampilkan
Catatan:
- hasilnya array baru
- kalau dipakai pada beberapa array sekaligus, callback menerima elemen sejajar dari tiap array
array_filter()
array_filter() dipakai untuk menyaring elemen yang tidak lolos kondisi.
$ages = [12, 18, 21, 15];
$adults = array_filter($ages, fn ($age) => $age >= 18);Kapan dipakai:
- membuang data kosong atau tidak valid
- menyaring record berdasarkan kondisi
- membersihkan input sebelum diproses
Catatan penting:
- key asli dipertahankan
- kalau perlu array berindeks ulang, gunakan
array_values()setelah filtering
$adults = array_values($adults);array_reduce()
array_reduce() dipakai untuk mengubah seluruh array menjadi satu nilai akhir.
$numbers = [1, 2, 3, 4];
$sum = array_reduce($numbers, fn ($carry, $item) => $carry + $item, 0);Kapan dipakai:
- menghitung total
- membentuk agregat
- merangkum data menjadi satu hasil
Bayangkan array_reduce() sebagai cara untuk menyusun hasil akhir dari akumulasi elemen.
array_merge()
array_merge() dipakai untuk menggabungkan beberapa array.
$a = ['PHP', 'Laravel'];
$b = ['MySQL', 'Redis'];
$result = array_merge($a, $b);Catatan penting:
- untuk indexed array, elemen digabung berurutan
- untuk string key yang sama, nilai dari array terakhir akan menimpa yang sebelumnya
- untuk numeric key, key akan diindex ulang
Contoh jebakan:
$a = [10 => 'a'];
$b = [20 => 'b'];
$result = array_merge($a, $b);
// hasil key menjadi 0 dan 1, bukan 10 dan 20Kalau ingin mempertahankan key numerik, sering kali operator + lebih cocok daripada array_merge(), tergantung tujuan.
array_key_exists()
array_key_exists() dipakai untuk mengecek apakah sebuah key benar-benar ada di array.
$user = ['name' => null, 'email' => 'alya@example.com'];
var_dump(array_key_exists('name', $user)); // trueIni beda dengan isset().
isset($user['name']); // false, karena nilainya nullKapan dipakai:
- membedakan key yang tidak ada dan key yang nilainya
null - validasi struktur array
- membaca data konfigurasi atau payload yang bisa berisi
null
Perbandingan cepat fungsi umum
| Fungsi | Tujuan | Hasil |
|---|---|---|
array_map() | transformasi tiap elemen | array baru |
array_filter() | seleksi elemen | array baru |
array_reduce() | akumulasi menjadi satu nilai | nilai tunggal |
array_merge() | menggabungkan array | array baru |
array_key_exists() | cek keberadaan key | boolean |
Contoh pipeline transformasi
Misalnya data transaksi ingin difilter, dihitung totalnya, lalu diformat.
$transactions = [
['amount' => 150000, 'status' => 'paid'],
['amount' => 50000, 'status' => 'pending'],
['amount' => 200000, 'status' => 'paid'],
];
$paid = array_filter($transactions, fn ($trx) => $trx['status'] === 'paid');
$amounts = array_map(fn ($trx) => $trx['amount'], $paid);
$total = array_reduce($amounts, fn ($carry, $amount) => $carry + $amount, 0);Alurnya:
array_filter()mengambil transaksi yang statusnyapaidarray_map()mengekstrak nilaiamountarray_reduce()menjumlahkan semuanya
Jebakan umum
1. Mengira key otomatis selalu rapi
Kalau Anda menghapus elemen dari indexed array, key bisa loncat.
$data = [10, 20, 30];
unset($data[1]);Hasilnya bukan array berindeks ulang. Kalau loop atau JSON output mengharapkan urutan rapat, panggil array_values().
2. Bingung antara isset() dan array_key_exists()
isset()memeriksa key dan nilainya bukannullarray_key_exists()memeriksa key saja
Kalau data memang boleh bernilai null, pakai array_key_exists().
3. Menganggap array_merge() mempertahankan numeric key
Tidak selalu. Numeric key sering direset saat merge.
Kalau struktur Anda bergantung pada key numerik, cek kembali apakah array_merge() memang alat yang tepat.
4. Lupa bahwa array_filter() mempertahankan key asli
Ini sering bikin json_encode() menghasilkan object, bukan array list, karena key tidak rapat.
$list = [0 => 'a', 1 => 'b', 2 => 'c'];
$list = array_filter($list, fn ($v) => $v !== 'b');
// key masih 0 dan 25. Memakai loop manual saat fungsi array lebih jelas
Loop foreach tetap valid, tapi untuk transformasi yang sederhana, array_map() dan array_filter() biasanya lebih mudah dibaca ulang.
6. Nested array tanpa kontrak struktur yang jelas
Kalau shape data berubah-ubah, akses seperti $data[0]['items'][1]['name'] cepat jadi rapuh. Saat data mulai kompleks, dokumentasikan shape array atau ubah ke struktur objek/DTO yang lebih tegas.
Praktik yang enak dipakai ulang
- pakai indexed array untuk daftar
- pakai associative array untuk record atau konfigurasi
- pakai nested array hanya kalau shape-nya tetap dan jelas
- gunakan
array_map()untuk transformasi - gunakan
array_filter()untuk seleksi - gunakan
array_reduce()untuk agregasi - gunakan
array_key_exists()saatnulladalah nilai yang valid - rapikan ulang indexed array dengan
array_values()kalau perlu
Referensi terkait
- PHP manual: Arrays
- PHP manual:
array_map() - PHP manual:
array_filter() - PHP manual:
array_reduce() - PHP manual:
array_merge() - PHP manual:
array_key_exists()
Kalau ingin, halaman ini bisa dikembangkan lagi menjadi versi lanjutan yang membahas array_column(), array_walk(), in_array(), array_unique(), dan sorting array.