Topik ini membahas pembacaan dan penulisan elemen array, mulai dari akses dengan kurung siku, pemeriksaan keberadaan kunci dengan isset() dan array_key_exists(), penghapusan elemen dengan unset(), hingga pola akses aman untuk kunci yang belum ada. Setelah membacanya, elemen array dapat dibaca, diubah, ditambah, dan dihapus dengan sengaja tanpa memicu peringatan kunci yang tidak tersedia.
Membaca dan mengubah dengan kurung siku#
Pembacaan elemen dilakukan dengan menuliskan kunci di dalam kurung siku setelah variabel, misalnya $stok['kertas']. Bentuk yang sama dipakai untuk mengubah nilai pada kunci yang sudah ada maupun menambah elemen baru, karena penulisan pada kunci yang belum terdapat di array otomatis menambahkannya. Kurung siku kosong $stok[] menambah elemen dengan kunci otomatis di ujung array. Pada array bertingkat, yaitu array yang elemennya juga berupa array, kunci dituliskan berantai seperti $data['siswa']['nilai'].
PHP juga mendukung destructuring, yaitu membongkar isi array langsung ke beberapa variabel dengan penulisan [$nama, $nilai] = $baris untuk elemen berurutan, atau ['nama' => $n, 'nilai' => $nl] = $peserta untuk elemen yang dipilih berdasarkan kuncinya. Contoh berikut membaca satu elemen, mengubahnya, menambah elemen baru, lalu membongkar array dua elemen ke dua variabel.
<?php
$stok = ['kertas' => 120, 'spidol' => 45];
echo $stok['kertas'], "\n";
$stok['kertas'] = 100;
$stok['penghapus'] = 60;
print_r($stok);
$baris = ['Budi', 85];
[$nama, $nilai] = $baris;
echo "$nama memperoleh nilai $nilai\n";120
Array
(
[kertas] => 100
[spidol] => 45
[penghapus] => 60
)
Budi memperoleh nilai 85Keluaran print_r() menunjukkan bahwa penulisan pada kunci baru menambah elemen tanpa menggeser elemen lain. Baris terakhir memperlihatkan hasil destructuring yang mengisi $nama dan $nilai menurut urutan kunci 0 dan 1.
Memeriksa kunci dengan isset dan array_key_exists#
Fungsi isset() mengembalikan true apabila kunci ada dan nilainya bukan null. Fungsi array_key_exists() mengembalikan true apabila kunci ada tanpa memandang nilainya. Perbedaan ini terlihat pada elemen yang sengaja diberi nilai null, misalnya catatan barang rusak yang jumlahnya memang belum diisi. Kedua fungsi juga bersifat aman untuk kunci yang belum ada, sehingga keduanya dapat dipanggil tanpa memicu peringatan.
Contoh berikut menguji kunci dengan nilai terisi, kunci bernilai null, dan kunci yang sama sekali tidak ada.
<?php
$stok = ['kertas' => 120, 'rusak' => null];
var_dump(isset($stok['kertas']));
var_dump(isset($stok['rusak']));
var_dump(array_key_exists('rusak', $stok));
var_dump(array_key_exists('spidol', $stok));bool(true)
bool(false)
bool(true)
bool(false)Hasil pada keluaran memperlihatkan perbedaannya secara langsung. Kunci 'rusak' bernilai null sehingga isset() melaporkan false, sedangkan array_key_exists() melaporkan true karena kuncinya memang tercatat. Kunci 'spidol' yang belum ada dilaporkan false oleh keduanya.
Menghapus elemen dengan unset#
Pemanggilan unset($stok['spidol']) menghapus pasangan kunci dan nilai tersebut dari array. Elemen lain beserta kuncinya tidak digeser, sehingga array asosiatif tetap memegang kuncinya, sedangkan array terindeks ditinggalkan dengan lubang kunci. Fungsi count() menghitung sisa elemen setelah penghapusan. Apabila array perlu kembali berbentuk list, yaitu array dengan kunci bilangan berurutan tanpa lubang, array_values() menyusun ulang kuncinya mulai dari 0.
Contoh berikut menghapus satu elemen array asosiatif, lalu menghapus satu elemen array terindeks dan menyusun ulang kuncinya.
<?php
$stok = ['kertas' => 120, 'spidol' => 45, 'penghapus' => 60];
unset($stok['spidol']);
print_r($stok);
echo count($stok), "\n";
$nilai = [70, 80, 90, 100];
unset($nilai[1]);
print_r($nilai);
print_r(array_values($nilai));Array
(
[kertas] => 120
[penghapus] => 60
)
2
Array
(
[0] => 70
[2] => 90
[3] => 100
)
Array
(
[0] => 70
[1] => 90
[2] => 100
)Array asosiatif kehilangan kunci 'spidol' tetapi kunci 'kertas' dan 'penghapus' tetap pada tempatnya, dan count() melaporkan dua elemen tersisa. Pada array terindeks, kunci 1 hilang dan kunci 0, 2, 3 tetap tertulis sampai array_values() menyusunnya ulang menjadi 0, 1, 2.
Pola akses aman untuk kunci yang belum ada#
Membaca kunci yang belum ada pada PHP 8 menghasilkan nilai null disertai pesan E_WARNING bertuliskan Undefined array key. Nilai null yang masuk tanpa disadari sering menjadi sumber perhitungan keliru di lokasi yang jauh dari titik pembacaannya, sehingga akses langsung pada kunci yang belum pasti perlu dihindari. Pola yang aman adalah memeriksa kunci terlebih dahulu dengan isset() atau array_key_exists(). Sebagai alternatif, kunci dibaca dengan operator ?? yang mengambil nilai default apabila kunci tidak ada atau bernilai null.
Contoh berikut membaca kunci yang belum ada dengan operator ??, lalu membaca kunci yang sudah ada setelah diperiksa dengan array_key_exists().
<?php
$stok = ['kertas' => 120];
$spidol = $stok['spidol'] ?? 0;
echo "spidol: $spidol\n";
if (array_key_exists('kertas', $stok)) {
echo "kertas: {$stok['kertas']}\n";
}spidol: 0
kertas: 120Operator ?? membaca kunci 'spidol' yang belum ada dan mengambil 0 sebagai nilai default tanpa memicu peringatan apa pun. Cabang if dieksekusi karena kunci 'kertas' memang tercatat, sehingga pembacaan di dalam kurung kurawal aman.
Kesalahan umum#
- Membaca kunci tanpa pemeriksaan. Akses langsung pada kunci yang belum ada memicu
E_WARNINGdan menghasilkannull, sehingga perhitungan berikutnya memakai nilai yang tidak pernah diisi. Baca dengan operator??atau periksa kuncinya terlebih dahulu. - Menganggap hasil
falsedariisset()berarti kunci tidak ada. Nilainullpada kunci yang tercatat tetap membuatisset()mengembalikanfalse, sehingga pemeriksaan keberadaan kunci perlu memakaiarray_key_exists(). - Mengharapkan indeks menyusul otomatis setelah
unset(). Kunci elemen lain tidak digeser, sehingga array terindeks ditinggalkan dengan lubang. Panggilarray_values()apabila bentuk berurutan diperlukan kembali. - Menghapus seluruh array ketika maksudnya menghapus satu elemen.
unset($stok)menghapus variabelnya, sedangkanunset($stok['spidol'])hanya menghapus satu elemen. Pastikan kunci dituliskan pada pemanggilanunset().
Ringkasan#
- Elemen dibaca, diubah, dan ditambah dengan kurung siku, termasuk penambahan lewat kurung siku kosong di ujung array.
isset()menguji kunci dengan nilai bukannull, sedangkanarray_key_exists()menguji keberadaan kunci apa adanya.unset()menghapus satu pasangan kunci dan nilai tanpa menggeser kunci lainnya, danarray_values()menyusun ulang kunci bilangan.- Operator
??memberi nilai default ketika kunci tidak ada atau bernilainull, sehingga pembacaan tidak memicuE_WARNING.
Referensi#
- Arrays — Manual PHP — Mencakup sintaks akses elemen dengan kurung siku dan penambahan elemen baru.
- isset — Manual PHP
— Menjelaskan perilaku
falseketika variabel atau kunci bernilainull. - array_key_exists — Manual PHP — Menegaskan pemeriksaan keberadaan kunci tanpa memandang nilainya.
- unset — Manual PHP — Membahas penghapusan elemen array dan penghapusan variabel.