Menu

in_array() PHP: Cek Apakah Nilai Ada di Array

in_array($needle, $haystack) mengembalikan true saat nilainya ada di array. Berikan true sebagai argumen ketiga untuk pemeriksaan strict, in_array('1', $ids, true), agar tipenya juga harus cocok. Pelajari flag strict, pencarian yang tidak membedakan huruf besar dan kecil, memeriksa beberapa nilai, array bersarang, dan alternatif isset yang cepat.

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

in_array($needle, $haystack) mengembalikan true jika nilainya ada di suatu tempat di array dan false jika tidak. Berikan true sebagai argumen ketiga, in_array($needle, $haystack, true), agar tipenya juga harus sama; bentuk strict itulah yang sebaiknya kamu pakai secara default.

in_array() hanya melihat nilai. Untuk memeriksa apakah sebuah key ada, pakai array_key_exists() atau isset().

Parameter strict

Tanpa argumen ketiga, in_array() membandingkan dengan ==, yang mengonversi tipe sebelum membandingkan. Dengan true, fungsi ini membandingkan dengan ===: nilai dan tipenya harus sama-sama cocok. Perbedaannya langsung terlihat begitu array mencampur angka dan string, yang umum terjadi pada data dari form, URL, dan file CSV.

Setiap sel di bawah ini adalah hasil == dan === untuk pasangan nilai tersebut di PHP 8.3. in_array() menjawab true jika needle dan salah satu elemen menghasilkan true di tabel untuk mode yang kamu pakai. Pindah-pindah tab dan perhatikan baris null, true, dan string numerik.

Kecocokan in_array loose (==) vs strict (===)
Point at or tap a cell to read it as PHP.
$a == $btruefalsenull01"0""1""""abc""10""1e1"10[]
true
false
null
0
1
"0"
"1"
""
"abc"
"10"
"1e1"
10
[]
Every cell computed by PHP 8.3.19.

Ada satu aturan yang berubah di PHP 8: string non-numerik tidak lagi sama dengan 0, jadi in_array('abc', [0]) bernilai false sekarang tetapi true di PHP 7. Kode yang ditulis untuk PHP 7 kadang bergantung pada hal itu, satu alasan lagi untuk memberikan true dan tidak bergantung pada aturan konversi. Halaman operator perbandingan menjelaskannya secara lengkap.

in_array tanpa membedakan huruf besar dan kecil

in_array() membandingkan string secara persis, jadi 'PHP' dan 'php' berbeda. Ubah needle dan array-nya menjadi huruf kecil sebelum memeriksa. mb_strtolower() juga menangani huruf beraksen dan non-Latin.

Memeriksa beberapa nilai sekaligus

in_array() menerima satu needle. Untuk beberapa nilai, bandingkan array-array itu sebagai himpunan: array_diff() mengembalikan needle yang tidak ada, jadi hasil kosong berarti semuanya ada, dan array_intersect() mengembalikan needle yang ditemukan.

array_diff() dan array_intersect() membandingkan nilai sebagai string, jadi 1 dan '1' dianggap sama di sana.

in_array pada array multidimensi

in_array() tidak mencari di dalam array bersarang. Untuk memeriksa apakah ada baris yang field-nya bernilai tertentu, ambil field itu dulu dengan array_column(), lalu cari di list yang sudah datar.

Baris terakhir menunjukkan bahwa needle-nya sendiri bisa berupa array: needle itu cocok dengan baris yang identik, dengan key, nilai, dan urutan yang sama.

in_array vs array_search vs isset

Ketiganya menjawab "apakah nilainya ada?", tetapi mengembalikan hal yang berbeda dan berjalan dengan kecepatan yang berbeda:

PemanggilanMengembalikanKecepatan pada array besar
in_array($v, $arr, true)true atau falsememindai setiap elemen
array_search($v, $arr, true)key-nya, atau falsememindai setiap elemen
isset($set[$v])true atau falsesatu kali hash lookup

Pakai array_search() saat kamu perlu tahu di mana nilainya berada. Saat kamu memeriksa banyak nilai terhadap list besar yang sama, balik list itu sekali agar nilainya menjadi key, lalu pakai isset().

Waktunya berubah dari satu run ke run berikutnya, tetapi selisihnya tidak: lookup isset() tetap datar sementara in_array() bertambah seiring ukuran list. array_flip() hanya bekerja untuk nilai string dan integer, dan nilai duplikat melebur menjadi satu key, yang tidak masalah untuk pemeriksaan keanggotaan.

Pertanyaan yang sering diajukan

Apa fungsi parameter ketiga in_array?

Parameter ini mengaktifkan perbandingan strict. in_array($x, $arr, true) membandingkan dengan ===, jadi tipenya harus cocok selain nilainya: in_array('1', [1, 2], true) bernilai false. Tanpanya, PHP membandingkan dengan == dan mengonversi tipe lebih dulu.

Apakah saya harus selalu memakai mode strict dengan in_array?

Biasanya ya. Mode loose membuat in_array(null, [0]), in_array(true, ['any string']), dan in_array('1e1', ['10']) semuanya mengembalikan true. Matikan hanya saat kamu memang ingin '5' dari form cocok dengan integer 5.

Bagaimana cara membuat in_array tidak membedakan huruf besar dan kecil?

Ubah kedua sisinya menjadi huruf kecil: in_array(strtolower($needle), array_map('strtolower', $haystack), true). Pakai mb_strtolower saat teksnya bisa berisi huruf non-ASCII.

Bagaimana cara memeriksa apakah beberapa nilai ada di array?

Untuk mewajibkan semuanya ada, periksa bahwa tidak ada yang tersisa: !array_diff($needles, $haystack). Untuk mewajibkan setidaknya satu, periksa apakah ada irisan: (bool) array_intersect($needles, $haystack).

Apakah in_array lambat?

Fungsi ini memindai array elemen demi elemen, jadi lambat untuk array besar yang diperiksa berkali-kali. Balik array-nya sekali dengan $set = array_flip($haystack); lalu pakai isset($set[$value]), yang hanya satu kali hash lookup.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai