函數簽名
stripos(string $haystack, string $needle, int $offset = 0): int|false
- 大小寫不敏感查找
$needle 在 $haystack 首次出現位置(0 起索引)。
- 未找到回傳
false。
- 區分大小寫版本請用
strpos()。
經典陷阱:0 == false
$str = 'abc';
$pos = stripos($str, 'a'); // 回傳 0
if ($pos == false) { // 危險!0 == true,進入分支
echo "未找到";
}
if ($pos === false) { // 正確:嚴格比較類型與值
echo "未找到";
}
最佳實踐
// 寫法 1:嚴格比較
if (stripos($str, 'keyword') === false) { ... }
// 寫法 2:隱式轉換(不推薦,語義不明)
if (stripos($str, 'keyword') !== false) { ... }
// 寫法 3:PHP 8.0+ str_contains() 更直觀
if (!str_contains($str, 'keyword')) { ... } // 區分大小寫
if (!str_contains(strtolower($str), 'keyword')) { ... } // 不區分大小寫
offset 參數應用
$str = 'abcabc';
echo stripos($str, 'a', 2); // 從索引 2 開始找,輸出 3
效能提示
- 頻繁查找固定字串集合,考慮
preg_match() 或建立 Trie 樹。
- 超長字串(>1MB)建議分塊處理或使用流式搜尋。