Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah `in_array()` dan `array_search()` PHP Kadangkala Mengembalikan Keputusan Yang Tidak Dijangka?

Mengapakah `in_array()` dan `array_search()` PHP Kadangkala Mengembalikan Keputusan Yang Tidak Dijangka?

Patricia Arquette
Lepaskan: 2024-12-24 01:27:11
asal
955 orang telah melayarinya

Why Do PHP's `in_array()` and `array_search()` Sometimes Return Unexpected Results?

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan