首頁 >後端開發 >php教程 >為什麼比較 `strpos()` 和 `true` 無法偵測 PHP 中的字串出現?

為什麼比較 `strpos()` 和 `true` 無法偵測 PHP 中的字串出現?

Susan Sarandon
Susan Sarandon原創
2024-12-10 08:29:10339瀏覽

Why Does Comparing `strpos()` to `true` Fail to Detect String Occurrences in PHP?

嚴格比較strpos() 與true 的錯誤解釋

在嘗試確定字串是否包含不需要的元素時,程式設計師在使用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中文網其他相關文章!

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