在PHP 中, stripos()是一個非常常用的函數,用於不區分大小寫地查找字符串在另一個字符串中首次出現的位置。如果找到了, stripos()會返回一個整數,表示匹配字符串在目標字符串中的起始位置;如果沒找到,則返回false 。
這裡的問題就來了:由於返回的是“ 0或false ”,在條件判斷中很容易出錯。
舉個常見的坑:
if (stripos($haystack, $needle)) {
echo "找到了!";
} else {
echo "沒找到!";
}
這段代碼如果$needle在$haystack的開頭(位置為0), stripos()返回0 ,而if (0)會被當作false,導致“沒找到”的輸出,邏輯錯誤!
要優雅地處理stripos()返回false的情況,我們應該明確判斷是否為false ,而不是簡單的布爾值判斷:
$pos = stripos($haystack, $needle);
if ($pos !== false) {
echo "找到了,在位置:$pos";
} else {
echo "沒找到!";
}
通過使用全等比較符!== ,我們可以精準地區分0和false 。
為了讓代碼更清晰、可重用,我們可以封裝一個輔助函數:
function containsIgnoreCase($haystack, $needle) {
return stripos($haystack, $needle) !== false;
}
// 使用示例
if (containsIgnoreCase("https://m66.net/news", "NEWS")) {
echo "包含關鍵詞!";
} else {
echo "不包含關鍵詞!";
}
這樣寫代碼既易讀又減少了重複邏輯,非常適合在項目中廣泛使用。
假設我們需要判斷用戶訪問的URL 是否包含utm_source :