在嘗試確定字串是否包含不需要的元素時,程式設計師在使用strpos() 直接進行操作時可能會遇到意外結果相等比較。
考慮這個場景:
$link = 'https://google.com'; $unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png']; foreach ($unacceptables as $unacceptable) { if (strpos($link, $unacceptable) === true) { echo 'Unacceptable Found<br />'; } else { echo 'Acceptable!<br />'; } }
有趣的是,這段程式碼列印「可接受!」對於 $unacceptables 中的每個元素,儘管 $link 中存在 https。這種看似矛盾的行為源自於 strpos() 本身的性質。
深入研究 PHP 官方文件可以闡明該函數的真正目的:
傳回在指標中第一次出現的數字位置haystack 字串。
因此,當 strpos() 的結果直接與 true 進行比較時,您可以有效地檢查是否存在$link 中不需要的元素,而不是它與 true 相等。
要修正這個問題,更合適的方法是在if 語句中使用!== false:
// ... if (strpos($link, $unacceptable) !== false) {
透過這樣做因此,您可以正確評估strpos() 是否偵測到不良元素的存在,從而產生所需的結果。
以上是為什麼比較 `strpos()` 和 `true` 無法偵測 PHP 中的字串出現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!