對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中文網其他相關文章!