首頁 >後端開發 >php教程 >為什麼 PHP 中與 strpos() 的鬆散比較會導致意外結果?

為什麼 PHP 中與 strpos() 的鬆散比較會導致意外結果?

Barbara Streisand
Barbara Streisand原創
2024-12-26 10:38:09940瀏覽

Why Does Loose Comparison with strpos() in PHP Lead to Unexpected Results?

對strpos() 傳回值的鬆散解釋會導致意外結果

在尋找字串中的特定子字串時,存在一個使用PHP 的strpos() 函數時可能會導致意外結果的陷阱。讓我們揭開為什麼鬆散檢查 strpos() 返回值會導致混亂的謎團。

考慮下面的程式碼片段:

if (
    strpos($grafik['data'], $ss1) != false
    && strpos($grafik['data'], $ss2) != false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

在此程式碼中,strpos() 用來決定$grafik['data'] 字串中子字串$ss1 和$ss2的位置。目的是檢查兩個子字串是否存在,並確保 $ss1 排在 $ss2 之前。

根據 PHP 手冊,如果找不到子字串,strpos() 傳回 false。然而,我們發現,當子字串從零位置(即字串的開頭)開始時,strpos() 會傳回 0。這會導致意外的解釋,其中表達式:

strpos($grafik['data'], $ss1) != false

計算結果為false,儘管 $ss1 從零位置出現。罪魁禍首是弱等價運算子 !=,它認為 0 等同於 false。

要修正此問題,應使用嚴格等價運算子 ===:

if (
    strpos($grafik['data'], $ss1) !== false
    && strpos($grafik['data'], $ss2) !== false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

=== 運算子執行嚴格比較,確保 0 不被視為等同於 false。透過此更正,程式碼將正確確定 $ss1 和 $ss2 的存在及其相對位置。

以上是為什麼 PHP 中與 strpos() 的鬆散比較會導致意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn