Ekstensi array PHP memuat lebih dari 80 fungsi bawaan, dan chapter-chapter sebelumnya sudah membahas kelompok besar secara khusus: sorting, searching, map–filter–reduce, merge dan difference. Tersisa segudang fungsi kecil yang justru paling sering dipakai sehari-hari: mengemas variabel menjadi array, membuang duplikat, mengambil nilai acak, sampai memeriksa apakah sebuah array adalah list. Chapter ini merangkumnya satu per satu secara ringkas namun tetap dengan contoh yang bisa Anda jalankan — anggap sebagai kotak perkakas yang layak Anda hafal isinya.
compact dan extract: Dua Arah antara Variabel dan Array #
compact() mengumpulkan beberapa variabel menjadi associative array dengan kunci bernama sama persis; extract() melakukan kebalikannya — memecah array menjadi variabel-variabel baru:
<?php
$nama = 'Budi';
$kota = 'Bandung';
$profil = compact('nama', 'kota');
print_r($profil);
$info = ['user' => 'Siti', 'role' => 'admin'];
extract($info);
echo "$user adalah $role\n";Output yang Dihasilkan:
Array
(
[nama] => Budi
[kota] => Bandung
)
Siti adalah admincompact('nama', 'kota') menghasilkan ['nama' => 'Budi', 'kota' => 'Bandung'] karena nama variabel dikirim sebagai string. extract($info) lalu melahirkan variabel $user dan $role dari kunci array. Pola compact() lazim dipakai saat menyiapkan data untuk template; extract() lebih jarang dan berisiko.
Menambah dan Mengambil Elemen dari Ujung Array #
Empat fungsi klasik ini membentuk dua sisi operasi pada dua ujung array. Pembahasan penuhnya ada di Chapter Menambah, Mengubah, dan Menghapus Elemen ; di sini kita rangkum perilakunya dalam satu tabel dan satu contoh:
| Fungsi | Posisi | Efek | Nilai kembali |
|---|---|---|---|
array_push($arr, ...$v) | ujung kanan | menambah satu atau lebih elemen | jumlah elemen baru |
array_pop($arr) | ujung kanan | menghapus elemen terakhir | elemen yang dihapus |
array_unshift($arr, ...$v) | ujung kiri | menambah di awal | jumlah elemen baru |
array_shift($arr) | ujung kiri | menghapus elemen pertama | elemen yang dihapus |
<?php
$tugas = ['belajar', 'olahraga'];
$total = array_push($tugas, 'tidur', 'makan');
$terakhir = array_pop($tugas);
$pertama = array_shift($tugas);
array_unshift($tugas, 'bangun');
echo "total=$total terakhir=$terakhir pertama=$pertama\n";
print_r($tugas);Output yang Dihasilkan:
total=4 terakhir=makan pertama=belajar
Array
(
[0] => bangun
[1] => olahraga
[2] => tidur
)Setelah array_push, array berisi empat elemen sehingga $total bernilai 4. array_pop mengambil makan, array_shift mengambil belajar, lalu array_unshift menyisipkan bangun di depan. Pasangan array_push + array_pop membentuk struktur stack, sedangkan array_push + array_shift membentuk queue sederhana.
array_pad dan array_reverse #
array_pad() meratakan array ke panjang tertentu dengan nilai pengisi, dan array_reverse() membalik urutannya. Tanda ukuran menentukan sisi pengisian:
<?php
print_r(array_pad([1, 2], 5, 0));
print_r(array_pad([1, 2, 3, 4], 2, 0));
print_r(array_pad([1, 2], -5, 0));
print_r(array_reverse([1, 2, 3]));
print_r(array_reverse(['a' => 1, 'b' => 2], true));Output yang Dihasilkan:
Array
(
[0] => 1
[1] => 2
[2] => 0
[3] => 0
[4] => 0
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 1
[4] => 2
)
Array
(
[0] => 3
[1] => 2
[2] => 1
)
Array
(
[b] => 2
[a] => 1
)Ukuran positif 5 mengisi nol di sisi kanan sampai panjang lima; ukuran negatif -5 mengisi di sisi kiri. Ukuran yang lebih kecil dari panjang array tidak pernah memotong — [1, 2, 3, 4] dikembalikan apa adanya. Pada array_reverse, kunci string ikut terbalik beserta nilainya; parameter kedua bernilai true mempertahankan kunci asli, sedangkan tanpa parameter tersebut kunci numerik di-reindex dari nol.
Statistik Cepat: array_sum, array_product, min, max #
Empat fungsi ini menghitung angka ringkas dari seluruh isi array tanpa loop:
<?php
echo array_sum([10, 20, 30]) . "\n";
echo array_product([2, 3, 4]) . "\n";
echo min([5, 2, 9]) . ' ' . max([5, 2, 9]) . ' ' . min(3, 7, 1) . "\n";Output yang Dihasilkan:
60
24
2 9 1array_sum menjumlahkan (60), array_product mengalikan (24), dan min/max bisa dipakai dua cara: dengan satu array, atau dengan beberapa argumen langsung seperti min(3, 7, 1). Untuk statistik yang lebih kaya — rata-rata, median — kombinasikan array_sum dengan count.
Membangun Deret dengan range #
range() membangun array berisi deret nilai secara otomatis, lengkap dengan langkah (step) dan dukungan huruf:
<?php
print_r(range(1, 5));
print_r(range(0, 10, 5));
print_r(range('a', 'c'));Output yang Dihasilkan:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
[0] => 0
[1] => 5
[2] => 10
)
Array
(
[0] => a
[1] => b
[2] => c
)Pemanggilan pertama menghasilkan [1, 2, 3, 4, 5]; parameter ketiga 5 pada pemanggilan kedua membuat lompatan lima-lima (0, 5, 10); dan range('a', 'c') bahkan bisa menghasilkan deret huruf. Fungsi ini berguna untuk nomor halaman, sumbu grafik sederhana, atau data uji cepat.
Membuang Duplikat dengan array_unique #
array_unique() menyisakan kemunculan pertama tiap nilai dan membuang sisanya, dengan kunci asli tetap dipertahankan:
<?php
$tag = ['php', 'sql', 'PHP', 'php', 'sql'];
print_r(array_unique($tag));
print_r(array_unique([1, '1', 1.0]));Output yang Dihasilkan:
Array
(
[0] => php
[1] => sql
[2] => PHP
)
Array
(
[0] => 1
)Kemunculan kedua php dan sql hilang, sedangkan PHP bertahan karena perbandingannya peka kapital. Contoh kedua memperlihatkan sifat pentingnya: array_unique membandingkan representasi string tiap nilai, sehingga 1, '1', dan 1.0 dianggap sama dan hanya nilai pertama yang bertahan.
Mengambil Elemen Acak dengan array_rand #
array_rand() memilih satu atau beberapa kunci secara acak dari array:
<?php
$menu = ['Nasi Goreng', 'Mie Ayam', 'Soto', 'Bakso'];
$kunci = array_rand($menu);
echo "Menu terpilih: {$menu[$kunci]}\n";Perhatikan bahwa contoh ini sengaja tidak menyertakan blok output: hasil array_rand berbeda pada setiap eksekusi, jadi output tetapnya tidak bisa ditampilkan secara jujur. Nilai yang dikembalikan adalah kunci elemen terpilih — untuk array di atas, salah satu angka 0–3 — sehingga nilai aslinya diambil lewat $menu[$kunci]. Kirim angka kedua untuk memilih beberapa kunci sekaligus, misalnya array_rand($menu, 2).
Penunjuk Internal: current, next, end, reset #
Setiap array memiliki penunjuk internal (internal pointer) yang menandai elemen aktif. Empat fungsi ini membaca dan menggesernya:
<?php
$hari = ['Senin', 'Selasa', 'Rabu', 'Kamis'];
echo current($hari) . "\n";
next($hari);
echo current($hari) . "\n";
echo end($hari) . "\n";
echo reset($hari) . "\n";Output yang Dihasilkan:
Senin
Selasa
Kamis
Senincurrent membaca elemen aktif, next dan end menggeser penunjuk lalu membacanya, dan reset kembali ke awal. Fungsi-fungsi ini muncul di kode lama dan berguna saat Anda perlu mengintip elemen tanpa loop penuh — misalnya end($log) untuk entri terakhir. Untuk iterasi biasa, foreach tetap jauh lebih jelas; kelemahan penunjuk internal adalah statusnya menempel pada array itu sendiri sehingga mudah saling mengganggu antar bagian kode.
array_is_list: Mendeteksi List #
Mulai PHP 8.1, array_is_list() memeriksa apakah sebuah array adalah list — berindeks numerik berurutan dari nol tanpa bolong:
<?php
var_dump(array_is_list([1, 2, 3]));
var_dump(array_is_list(['a' => 1]));
var_dump(array_is_list([1 => 'a', 0 => 'b']));
var_dump(array_is_list(['x', 'y', 5 => 'z']));
var_dump(array_is_list([]));Output yang Dihasilkan:
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)Hanya bentuk pertama yang lolos. Array kosong dianggap list yang sah. Pemeriksaan ini penting ketika array berpindah ke JSON: list menjadi array JSON [], sedangkan array lain menjadi object {} — Chapter Memilih Struktur Data
membahas implikasinya lebih jauh.
SplFixedArray dan ArrayObject #
Dua class SPL membungkus array dalam wujud object. SplFixedArray adalah array berukuran tetap yang hanya menerima indeks integer 0 hingga size - 1; karena strukturnya sederhana, jejak memorinya lebih kecil untuk koleksi besar yang ukurannya sudah diketahui:
<?php
$buffer = new SplFixedArray(3);
$buffer[0] = 'a';
$buffer[1] = 'b';
$buffer[2] = 'c';
echo $buffer->getSize() . "\n";
foreach ($buffer as $nilai) {
echo $nilai;
}
echo "\n";
print_r($buffer->toArray());Output yang Dihasilkan:
3
abc
Array
(
[0] => a
[1] => b
[2] => c
)Ukuran ditetapkan sekali di constructor, elemen yang belum diisi bernilai null, dan toArray() mengembalikan array biasa bila diperlukan. Sementara itu, ArrayObject membungkus array biasa menjadi object yang tetap bisa diakses dengan sintaks kurung siku, dihitung dengan count(), dan diiterasi dengan foreach:
<?php
$keranjang = new ArrayObject(['apel' => 3]);
$keranjang['jeruk'] = 5;
echo count($keranjang) . "\n";
foreach ($keranjang as $nama => $jumlah) {
echo "$nama: $jumlah\n";
}Output yang Dihasilkan:
2
apel: 3
jeruk: 5Perhatikan baris $keranjang['jeruk'] = 5; — ArrayObject mengimplementasikan interface ArrayAccess sehingga sintaks array tetap bekerja, namun nilainya kini hidup dalam sebuah object. Fungsi iterator_to_array() dari Chapter Array Iteration
juga bisa mengubah object seperti ini kembali menjadi array biasa.
Ringkasan #
Kotak perkakas kita kini lengkap: compact/extract untuk variabel, array_pad/array_reverse/range untuk membentuk deret, array_sum/min/max untuk statistik cepat, array_unique untuk duplikat, array_rand untuk acak, penunjuk internal untuk intip cepat, array_is_list untuk validasi bentuk, serta SplFixedArray dan ArrayObject untuk kebutuhan khusus. Kebingungan yang tersisa bukan lagi soal fungsi, melainkan soal keputusan: kapan array, kapan object, kapan struktur lain — pertanyaan yang kita jawab tuntas di Chapter berikutnya.