首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 尋找字串位置:strpos() 函數用法、回傳值陷阱與嚴格比較

     編輯:PHP 相關知識

前言

strpos() 回傳子字串在字串中首次出現的位置(0 起算)。但其回傳值可能是 0(找到在開頭)或 false(未找到),直接用 == 比較會導致邏輯錯誤,必須使用 === 嚴格比較。

基本用法

<?php
echo strpos("Hello world!", "wo") . "\n"; // 6
echo strpos("Hello world!", "xyz") . "\n"; // 空字串(實際為 false)
?>

回傳值陷阱示範

<?php
$haystack = "needle23423432";
$pos = strpos($haystack, "needle"); // 0

// 錯誤寫法:== 比較
if ($pos == false) {
    echo "未找到 (==)\n"; // 會執行!因為 0 == false 為 true
} else {
    echo "找到 (==)\n";
}

// 正確寫法:=== 嚴格比較
if ($pos === false) {
    echo "未找到 (===)\n";
} else {
    echo "找到 (===),位置: $pos\n"; // 正確輸出
}
?>

正確判斷模式

<?php
function contains(string $haystack, string $needle): bool {
    return strpos($haystack, $needle) !== false;
}

// 或使用 PHP 8 新函數
// str_contains($haystack, $needle) // 直接回傳 bool
?>

大小寫不敏感版本:stripos()

<?php
echo stripos("Hello World", "world") . "\n"; // 6
echo strpos("Hello World", "world") . "\n";  // false (區分大小寫)
?>

找尋所有出現位置

<?php
function strposAll(string $haystack, string $needle): array {
    $positions = [];
    $offset = 0;
    while (($pos = strpos($haystack, $needle, $offset)) !== false) {
        $positions[] = $pos;
        $offset = $pos + 1;
    }
    return $positions;
}

print_r(strposAll("ababa", "aba")); // [0, 2]
?>

效能提示

  • 僅需判斷是否包含:PHP 8+ 用 str_contains(),舊版用 strpos() !== false。
  • 大量搜尋:考慮 preg_match() 或建立索引(如倒排索引)。
  • 避免在迴圈中重複 strpos() 檢查同一字串,可先存入變數。

總結

strpos() 核心陷阱在於 0 與 false 的鬆散比較混淆,養成 !== false 或 === false 嚴格比較習慣即可避免 Bug。希望本文對您的 PHP 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved