Jika ada satu struktur data yang paling sering muncul di kode Laravel, struktur tersebut adalah array. Rule validasi dikirim sebagai array, konfigurasi aplikasi tersimpan sebagai array, opsi middleware dideklarasikan sebagai array, dan response API dibangun dari array. PHP menyediakan puluhan fungsi array_* bawaan untuk mengolah struktur tersebut, lalu Laravel menaikkan levelnya dengan class Collection — superset array dengan lebih dari seratus method. Chapter ini berfokus pada kemampuan array asli PHP yang perlu kita baca dengan lancar sebelum menyentuh Collection.
Array Berindeks dan Operasi Dasar #
Array berindeks menyimpan deretan nilai dengan nomor urut yang dimulai dari nol:
<?php
$tugas = ["Belajar route", "Buat migration", "Tulis test"];
echo count($tugas), "\n";
echo $tugas[0], "\n";
$tugas[] = "Deploy aplikasi"; // tambah di akhir
echo $tugas[3], "\n";
var_dump(in_array("Tulis test", $tugas));
var_dump(in_array("Belajar queue", $tugas));Output yang Dihasilkan:
3
Belajar route
Deploy aplikasi
bool(true)
bool(false)Fungsi count() melaporkan jumlah elemen, $tugas[] = menambahkan elemen di posisi akhir, dan in_array() memeriksa keanggotaan sebuah nilai. Ketika membaca kode Laravel, pola cek seperti in_array('auth', $middleware, true) akan sering kita jumpai.
Fungsi array_* yang Paling Sering Muncul #
Tiga fungsi membentuk trio pengolah data paling produktif di PHP: array_map mentransformasi setiap elemen, array_filter menyaring elemen, dan array_merge menggabungkan array:
<?php
$harga = [5000, 12500, 3000];
$hargaDiskon = array_map(fn ($h) => $h - 500, $harga);
echo implode(", ", $hargaDiskon), "\n";
$mahal = array_filter($harga, fn ($h) => $h >= 5000);
echo implode(", ", $mahal), "\n";
$gabungan = array_merge($harga, [1000, 2000]);
echo implode(", ", $gabungan), "\n";Output yang Dihasilkan:
4500, 12000, 2500
5000, 12500
5000, 12500, 3000, 1000, 2000array_map memanggil arrow function satu kali untuk setiap elemen dan mengumpulkan hasilnya; array_filter mempertahankan elemen yang membuat callback bernilai true; array_merge menempelkan kedua array menjadi satu. Tabel berikut merangkum fungsi yang perlu dikenali:
| Fungsi | Peran |
|---|---|
array_map($fn, $arr) | transformasi setiap elemen |
array_filter($arr, $fn) | buang elemen yang tidak lolos cek |
array_merge($a, $b) | gabungkan beberapa array |
in_array($v, $arr, true) | cek keanggotaan (strict) |
array_keys($arr) / array_values($arr) | ambil kunci saja / nilai saja |
count($arr) | hitung jumlah elemen |
Mengambil Kunci dan Nilai Secara Terpisah #
Dua fungsi pendamping yang sering muncul berpasangan dengan array_filter adalah array_keys() dan array_values(). Fungsi array_keys() mengembalikan array berisi seluruh kunci, sedangkan array_values() mengembalikan array berisi seluruh nilai dengan indeks yang dirapikan dari nol:
<?php
$siswa = ["andi" => 88, "budi" => 95, "siti" => 70];
print_r(array_keys($siswa));
print_r(array_values($siswa));
$harga = [5000, 12500, 3000];
$mahal = array_filter($harga, fn ($h) => $h >= 5000);
$indeksBaru = array_values($mahal); // rapikan indeks setelah filter
echo implode(", ", $indeksBaru), "\n";
echo count($mahal), " elemen lolos filter\n";Output yang Dihasilkan:
Array
(
[0] => andi
[1] => budi
[2] => siti
)
Array
(
[0] => 88
[1] => 95
[2] => 70
)
5000, 12500
2 elemen lolos filterHasil array_keys($siswa) berupa array ["andi", "budi", "siti"] — siap di-loop atau dicari dengan in_array(). Pemanggilan array_values($mahal) penting karena array_filter mempertahankan indeks asli: tanpa pemanggilan tersebut, array hasil filter tetap menyimpan indeks 0 dan 1, tetapi filter dengan syarat berbeda bisa menyimpan indeks berlubang seperti 0 dan 2.
Keluarga sort untuk Pengurutan #
PHP memisahkan fungsi pengurutan berdasarkan apa yang diurutkan dan apakah kunci dipertahankan:
<?php
$scores = [70, 95, 88, 60];
sort($scores); // urutkan nilai dari kecil ke besar
echo implode(", ", $scores), "\n";
$siswa = ["andi" => 88, "budi" => 95, "siti" => 70];
asort($siswa); // urutkan nilai, kunci ikut pindah
foreach ($siswa as $nama => $nilai) {
echo "$nama: $nilai\n";
}Output yang Dihasilkan:
60, 70, 88, 95
siti: 70
andi: 88
budi: 95sort() mengurutkan nilai dan menyusun ulang indeks dari nol, sedangkan asort() mengurutkan nilai dengan tetap menjaga pasangan kunci-nilai — perbedaan yang penting ketika kunci array adalah nama atau ID yang bermakna. Dengan kumpulan fungsi ini kita bisa membaca seluruh referensi array PHP
tanpa terintimidasi.
Destructuring dan Spread Operator #
PHP modern memungkinkan “membongkar” array ke variabel terpisah dengan destructuring, serta menggabungkan array dengan spread ...:
<?php
// Destructuring posisional
$tugas = ["Belajar route", 30, true];
[$judul, $durasi, $selesai] = $tugas;
echo "Judul: $judul | Durasi: $durasi menit\n";
// Spread operator
$wajib = ["required", "string"];
$opsional = ["nullable", "email"];
$rules = [...$wajib, ...$opsional, "max:255"];
echo implode(", ", $rules), "\n";Output yang Dihasilkan:
Judul: Belajar route | Durasi: 30 menit
required, string, nullable, email, max:255Baris [$judul, $durasi, $selesai] = $tugas memetakan elemen ke posisi variabel yang sesuai. Spread operator ...$wajib “menuangkan” elemen array langsung ke dalam array baru — perhatikan bahwa string "max:255" tetap ditulis sebagai elemen biasa di akhir.
Array di Kode Laravel #
Di aplikasi nyata, dua wujud array ini paling sering kita tulis. Pertama, rule validasi Laravel dikirim sebagai array (contoh tampilan):
// app/Http/Controllers/TugasController.php
$tersimpan = $request->validate([
'judul' => ['required', 'string', 'max:255'],
'durasi' => ['required', 'integer', 'min:1'],
]);Kedua, setiap berkas di folder config/ mengembalikan array berisi opsi aplikasi — misalnya config/cache.php mengembalikan array dengan kunci 'default' dan 'stores'. Ketika kita memanggil helper config('cache.default'), Laravel membaca array tersebut.
Array menyimpan banyak nilai sekaligus. Data bertipe teks pun punya perangkat olah tersendiri — fungsi string PHP dan class Str milik Laravel adalah topik chapter berikutnya.