Menu

PHP array_search(): Mencari Key dari Sebuah Nilai

array_search($value, $array) mengembalikan key dari elemen pertama yang sama dengan $value, atau false kalau tidak ada. Karena key-nya bisa 0, selalu uji hasilnya dengan !== false. Pelajari pencarian strict, mencari semua yang cocok, mencari di array multidimensi dengan array_column, dan pencarian tanpa membedakan huruf besar kecil.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

array_search($value, $array) mengembalikan key dari elemen pertama yang sama dengan $value, atau false kalau tidak ada elemen yang cocok. Karena key yang ditemukan bisa saja 0, uji hasilnya dengan !== false, seperti pada if (($key = array_search('pear', $fruits)) !== false).

Kalau kamu hanya butuh jawaban ya atau tidak, in_array() menjawabnya langsung. array_search() dipakai saat kamu perlu tahu di mana nilai itu berada, misalnya untuk mengubah atau menghapusnya.

Jebakan 0 vs false

Bug array_search() yang paling umum: nilainya adalah elemen pertama, key-nya 0, dan if ($key) menganggap 0 sebagai false. Kode itu bilang "tidak ditemukan" untuk nilai yang jelas-jelas ada. Bandingkan dengan !== false, yang hanya cocok dengan false sungguhan.

!= false punya bug yang sama dengan if ($key), karena 0 == false bernilai true. Hanya operator strict yang bisa membedakan keduanya.

Pencarian strict

Seperti in_array(), array_search() membandingkan dengan == kecuali kamu memberikan true sebagai argumen ketiga. Mode longgar membuat string bisa menemukan angka dan null bisa menemukan 0, sehingga yang dikembalikan adalah key yang tidak kamu duga.

Mencari semua key dengan sebuah nilai

array_search() berhenti di kecocokan pertama. array_keys($array, $value) mengembalikan setiap key yang cocok sebagai array; tambahkan true untuk perbandingan strict. Hasil kosong berarti tidak ada yang cocok, jadi tidak ada kebingungan 0 vs false.

Mencari di array multidimensi dengan array_column

array_search() tidak melihat ke dalam array bersarang. Untuk daftar baris, ambil field yang kamu cari dengan array_column(); posisi di list itu sama dengan nomor barisnya, jadi hasilnya adalah indeks baris tersebut.

array_column() menomori ulang hasilnya mulai dari 0, jadi cara ini hanya cocok saat baris-barisnya bernomor 0, 1, 2 tanpa celah. Setelah unset() atau array_filter(), penomorannya punya celah; jalankan array_values() pada baris-barisnya dulu, atau pakai pencarian dengan key seperti di dua baris terakhir. array_column() membahas lebih jauh bentuk dengan index key.

Pencarian tanpa membedakan huruf besar kecil

array_search() membandingkan string secara persis. Ubah kedua sisi menjadi huruf kecil untuk mengabaikan perbedaan huruf besar kecil. array_map() mempertahankan key, jadi key yang kamu dapat adalah key di array aslinya.

Mencari lalu mengganti atau menghapus

Alasan biasa untuk mencari adalah melakukan sesuatu pada elemen yang ditemukan. Dengan key di tangan, isi nilai baru untuk mengubahnya atau unset() untuk menghapusnya, dan selalu jaga dengan !== false lebih dulu: unset($arr[false]) diam-diam menghapus elemen dengan key 0.

Pertanyaan yang sering diajukan

Apa yang dikembalikan array_search kalau nilainya tidak ditemukan?

false. Kalau nilainya ditemukan, fungsi ini mengembalikan key-nya, yang bisa saja 0 atau string kosong, jadi periksa hasilnya dengan !== false, jangan pernah dengan if ($key) atau != false.

Kenapa pengecekan array_search saya gagal untuk elemen pertama?

Elemen pertama array berindeks punya key 0, dan 0 bernilai falsy. Karena itu if (array_search('a', ['a', 'b'])) masuk ke cabang tidak ditemukan. Tulis if (array_search('a', $arr) !== false).

Bagaimana cara mencari semua key untuk sebuah nilai di PHP?

array_search() berhenti di kecocokan pertama. array_keys($array, $value, true) mengembalikan setiap key yang nilainya cocok, dalam bentuk array (kosong kalau tidak ada).

Bagaimana cara mencari di array multidimensi di PHP?

Ambil field-nya menjadi list datar, lalu cari di situ: $i = array_search('ada@example.com', array_column($users, 'email'));, lalu baca barisnya sebagai $users[$i]. Cara ini berhasil kalau baris-barisnya bernomor 0, 1, 2; kalau tidak, pakai loop foreach.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai