Untuk menghapus elemen dari array PHP berdasarkan key-nya, pakai unset($array[$key]). Elemen itu hilang, key yang lain tetap persis seperti semula, dan unset pada key yang tidak ada bukan sebuah error.
Lihat hasil kedua: key-nya sekarang 0, 2, 3. unset tidak pernah menomori ulang.
Mengatur ulang index array setelah unset
List yang key-nya punya celah akan merepotkan nanti: loop for ($i = 0; ...) akan menemui index yang hilang, dan json_encode menulis objek JSON, bukan array. array_values() memberimu key yang rapi lagi.
Menghapus berdasarkan posisi dengan array_splice
array_splice($array, $offset, $length) menghapus $length elemen mulai dari posisi $offset, menomori ulang key, dan mengembalikan elemen yang dihapusnya. Offset negatif dihitung dari akhir. Fungsi ini juga bisa menyisipkan elemen pengganti dalam panggilan yang sama.
array_splice bekerja berdasarkan posisi, bukan key: pada array asosiatif, fungsi ini menghapus berdasarkan urutan tempatnya, dan key string tetap dipertahankan. Halaman array_slice membandingkannya dengan array_slice, yang menyalin sebagian array tanpa mengubah aslinya.
Menghapus elemen berdasarkan nilai
array_diff($array, [$value]) mengembalikan array tanpa semua elemen yang sama dengan $value, dan key elemen lainnya tetap. Untuk menghapus kecocokan pertama saja, cari key-nya dengan array_search lalu unset.
array_diff membandingkan nilai sebagai string, jadi array_diff([1, "1", 2], [1]) menghapus integer maupun string-nya. Kalau kondisinya lebih dari sekadar "sama dengan nilai ini", pakai array_filter dengan callback.
Menghapus elemen pertama atau terakhir
array_shift() menghapus elemen pertama dan array_pop() menghapus elemen terakhir. Keduanya mengembalikan elemen yang dihapus, sehingga praktis untuk queue dan stack.
array_shift menomori ulang key numerik mulai dari 0. array_pop tidak perlu melakukannya, karena celahnya ada di akhir.
Menghapus beberapa key sekaligus
unset menerima beberapa elemen dalam satu panggilan. Untuk menghapus daftar key yang tersimpan di sebuah array, balik array itu dengan array_flip() supaya namanya menjadi key, lalu berikan ke array_diff_key().
Kesalahan umum: unset dengan array_search saat nilainya tidak ada
array_search mengembalikan false saat tidak menemukan apa pun, dan false yang dipakai sebagai key array menjadi 0. Jadi baris ini menghapus elemen pertama setiap kali nilainya tidak ada di array:
Selalu simpan hasil array_search dan bandingkan dengan !== false sebelum kamu memakainya sebagai key. if ($key) biasa juga tidak cukup: kecocokan di index 0 juga bernilai falsy.
Pertanyaan yang sering diajukan
Bagaimana cara menghapus elemen array berdasarkan nilainya di PHP?
Untuk menghapus semua kemunculannya, pakai array_diff($arr, ['value']). Untuk menghapus yang pertama saja, cari key-nya lalu unset, sambil memeriksa bahwa nilainya memang ditemukan: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.
Bagaimana cara mengatur ulang index array setelah unset?
Bungkus dengan array_values(): $arr = array_values($arr); menomori ulang key mulai dari 0. Cara lain, hapus elemennya dengan array_splice($arr, $index, 1), yang langsung menomori ulang untukmu.
Bagaimana cara menghapus elemen pertama atau terakhir sebuah array?
array_shift($arr) menghapus dan mengembalikan elemen pertama, lalu menomori ulang key numerik. array_pop($arr) menghapus dan mengembalikan elemen terakhir.
Bolehkah memakai unset di dalam loop foreach?
Boleh. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } aman, karena foreach menelusuri salinan array sementara kamu mengubah aslinya. Celah di key tetap ada, jadi panggil array_values() sesudahnya kalau kamu butuh list.
Apakah unset pada key yang tidak ada menyebabkan error?
Tidak. unset($arr['missing']) tidak melakukan apa-apa dan tidak memunculkan warning, jadi kamu tidak perlu memeriksanya dulu dengan isset.