Fungsi in_array() dan array_search() PHP: Menangani Gelagat Ganjil
Fungsi PHP in_array() dan array_search() mempamerkan tingkah laku yang pelik apabila digunakan untuk menyemak nilai dalam tatasusunan. Isu yang membingungkan ini timbul apabila tatasusunan mengandungi unsur-unsur jenis yang berbeza.
Contoh:
$arr = [TRUE, "some string", "something else"]; $result = in_array("test", $arr); var_dump($result); // Output: bool(true) $result = array_search("test", $arr); var_dump($result); // Output: int(0)
Mengejutkan, bukan? Kedua-dua fungsi kembali benar, menunjukkan bahawa "ujian" berada dalam tatasusunan, walaupun jelas tidak. Tingkah laku ini berpunca daripada mekanisme perbandingan lalai yang digunakan oleh fungsi ini.
Perbandingan Tegas vs. Longgar:
Secara lalai, in_array() dan array_search() menggunakan perbandingan longgar (==), yang menilai benar walaupun jenis nilai yang dibandingkan adalah berbeza. Dalam contoh kami, elemen TRUE dalam tatasusunan secara automatik dihantar ke rentetan, menghasilkan TRUE == "ujian" dinilai kepada benar.
Penyelesaian: Menguatkuasakan Perbandingan Tegas
Untuk mengelakkan tingkah laku yang tidak dijangka ini, adalah perlu untuk menentukan perbandingan yang ketat (===) dengan menetapkan parameter ketiga pilihan fungsi ini kepada benar. Ini memaksa fungsi untuk menyemak kedua-dua nilai dan jenis elemen apabila membandingkan, memastikan hasil yang lebih tepat.
$result = in_array("test", $arr, true); var_dump($result); // Output: bool(false) $result = array_search("test", $arr, true); var_dump($result); // Output: int(-1)
Dalam contoh yang disemak ini, hasil yang betul diperoleh, kerana fungsi diarahkan untuk gunakan perbandingan yang ketat. "ujian" tidak ditemui dalam tatasusunan dan nilai yang dikembalikan mencerminkannya.
Atas ialah kandungan terperinci Mengapakah `in_array()` dan `array_search()` PHP Kadangkala Mengembalikan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!