Apakah mungkin untuk melakukan perbandingan case-insensitive ketika menggunakan in_array
fungsi?
Jadi dengan array sumber seperti ini:
$a= array(
'one',
'two',
'three',
'four'
);
Semua pencarian berikut akan mengembalikan true:
in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);
Fungsi atau serangkaian fungsi apa yang akan melakukan hal yang sama? Saya tidak berpikir in_array
sendiri bisa melakukan ini.
count(preg_grep('/^'.preg_quote($needle).'/$',$a)>0)
. Tidak begitu elegan, kalau begitu. (Perhatikan ^ dan $ karakter diperlukan, kecuali jika diinginkan sebagian pencocokan.) Namun jika Anda benar-benar ingin entri yang cocok dikembalikan, saya suka solusi ini.Yang jelas harus dilakukan adalah hanya mengubah istilah pencarian menjadi huruf kecil:
tentu saja jika ada huruf besar dalam array Anda harus melakukan ini terlebih dahulu:
dan cari itu. Tidak ada gunanya melakukan
strtolower
pada seluruh array dengan setiap pencarian.Namun mencari array adalah linear. Jika Anda memiliki array besar atau Anda akan sering melakukan ini, akan lebih baik untuk meletakkan istilah pencarian di dalam kunci array karena ini akan menjadi akses yang jauh lebih cepat:
kemudian
Satu-satunya masalah di sini adalah bahwa kunci array harus unik sehingga jika Anda memiliki tabrakan (misalnya "Satu" dan "satu") Anda akan kehilangan semua kecuali satu.
sumber
Dari Dokumentasi
sumber
>
ke setiap baris, itu berhasil. Saya hanya terbiasa menempatkan secara manual>
pada baris pertama.>
di awal setiap baris.Sumber: halaman buku panduan php.net in_array.
sumber
Katakanlah Anda ingin menggunakan in_array, di sini adalah bagaimana Anda dapat membuat case pencarian tidak sensitif.
In_array case-insensitive ():
Peka huruf besar-kecil:
sumber
Di atas benar jika kita mengasumsikan bahwa array hanya dapat berisi string, tetapi array juga dapat mengandung array lain. Juga fungsi in_array () dapat menerima array untuk $ needle, jadi strtolower ($ needle) tidak akan berfungsi jika $ needle adalah array dan array_map ('strtolower', $ haystack) tidak akan berfungsi jika $ haystack mengandung lainnya array, tetapi akan menghasilkan "PHP warning: strtolower () mengharapkan parameter 1 menjadi string, array diberikan".
Contoh:
Jadi saya membuat kelas pembantu dengan metode releveant, untuk melakukan pemeriksaan case-sensitive dan case-insensitive in_array (). Saya juga menggunakan mb_strtolower () alih-alih strtolower (), jadi penyandian lainnya dapat digunakan. Berikut kodenya:
sumber
Saya menulis fungsi sederhana untuk memeriksa nilai tidak sensitif dalam array kode di bawah ini.
fungsi:
Cara Penggunaan:
sumber
sumber
return
. Ketika hanya perlu menemukan 1 jarum, tidak ada gunanya untuk tetap iterasi setelah menemukannya. Saya akan memperbaiki kesalahan ketik, memanggang konsep $ ketat dan membuat beberapa penyempurnaan, mungkin sesuatu yang dekat dengan 3v4l.org/WCTi2 . Posting ini tidak sempurna, tetapi hatinya ada di tempat yang tepat.sumber
$ a = array ('satu', 'dua', 'tiga', 'empat');
$ b = in_array ('ONE', $ a, false);
sumber
true
perbandingan tipe ketat akan digunakan, mis'1' !== 1
. Ketikafalse
jenis juggling akan digunakan, misalnya'1' == 1
. Lihat php.net/in_array dan php.net/manual/en/types.comparisons.php untuk dokumentasi.