Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Perbandingan Longgar dengan strpos() dalam PHP Membawa kepada Keputusan Yang Tidak Dijangka?
Tafsiran Longgar bagi strpos() Nilai Pulangan Membawa Kepada Hasil Yang Tidak Dijangka
Dalam usaha untuk mencari subrentetan tertentu dalam rentetan, terdapat perangkap yang boleh membawa kepada hasil yang tidak diingini apabila menggunakan fungsi strpos() PHP. Mari kita bongkar misteri di sebalik mengapa semakan longgar nilai pulangan strpos() boleh menyebabkan kekeliruan.
Pertimbangkan coretan kod di bawah:
if ( strpos($grafik['data'], $ss1) != false && strpos($grafik['data'], $ss2) != false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Dalam kod ini, strpos() digunakan untuk menentukan kedudukan subrentetan $ss1 dan $ss2 dalam rentetan $grafik['data']. Tujuannya adalah untuk menyemak kehadiran kedua-dua subrentetan dan memastikan $ss1 dipesan sebelum $ss2.
Menurut manual PHP, strpos() mengembalikan palsu jika subrentetan tidak ditemui. Walau bagaimanapun, didapati bahawa apabila subrentetan bermula pada kedudukan sifar (iaitu, permulaan rentetan), strpos() mengembalikan 0. Ini membawa kepada tafsiran yang tidak diingini di mana ungkapan:
strpos($grafik['data'], $ss1) != false
menilai kepada palsu, walaupun $ss1 hadir dari kedudukan sifar. Penyebabnya ialah pengendali kesetaraan yang lemah !=, yang menganggap 0 sebagai bersamaan dengan palsu.
Untuk membetulkan isu ini, pengendali kesetaraan ketat === hendaklah digunakan sebaliknya:
if ( strpos($grafik['data'], $ss1) !== false && strpos($grafik['data'], $ss2) !== false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Operator === melakukan perbandingan yang ketat, memastikan bahawa 0 tidak dianggap bersamaan dengan palsu. Dengan pembetulan ini, kod akan menentukan dengan betul kehadiran $ss1 dan $ss2 serta kedudukan relatifnya.
Atas ialah kandungan terperinci Mengapa Perbandingan Longgar dengan strpos() dalam PHP Membawa kepada Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!