PHPの文字列処理関数の中には、 STRPOSとSTRPOSが2つの頻繁に使用される関数です。それらはほぼ同じように見え、1文字しか離れていませんが、実際には重要な違いがあります。この記事では、使用、違い、予防措置などの側面からのこれら2つの機能の類似点と相違点を徹底的に理解することができます。
StrposとStrposは、両方とも文字列が最初に別の文字列に表示される場所を見つけるために使用されます。それらの基本的な構文は次のとおりです。
strpos(string $haystack, mixed $needle, int $offset = 0): int|false
stripos(string $haystack, mixed $needle, int $offset = 0): int|false
$ haystackは、検索するターゲット文字列です。
$針は探しているサブストリングです。
$ offsetはオプションで、検索を開始する場所を指定します。
これは、2つの最大の違いです。
Strposは症例に敏感です。
Striposは症例に依存しません。
<?php
$str = "Hello World";
var_dump(strpos($str, "world")); // 出力:bool(false)
var_dump(stripos($str, "world")); // 出力:int(6)
?>
この例では、 Strposは小文字の「世界」を見つけることができないためFalseを返しますが、 Strposはケース非感受性であるため、位置6は正しく見つかります。
両方の関数は、整数(一致位置)またはfalse(見つかりません)を返します。一致する位置が0(つまり、サブストリングが最初にある)の場合、 == falseを使用して、一致が失敗するかどうかを判断することに注意する必要があります。
if (strpos("abc", "a") == false) {
echo "見つかりません";
}
出力は「見つかりません」ですが、実際には見つかります。
if (strpos("abc", "a") === false) {
echo "見つかりません";
}
常に合同===を使用して、位置0の誤判断を避けるために偽であるかどうかを判断します。
STRPOS :敏感な単語検出、キーコマンドマッチングなど、厳密にケースに敏感な検索が必要です。
STRIPOS :ユーザー入力の処理、UAの判断、URLパラメーターの分析など、検索をよりリラックスさせる必要があります。
<?php
$url = "https://gitbox.net/shop/product/123";
if (stripos($url, "/shop/") !== false) {
echo "これは製品ページです";
}
?>
この例では、 StripOSを使用して、URLに上限と小文字に関係なく、 / shop /キーワードが含まれているかどうかを判断すると、ユーザーが訪問するページのタイプを効果的に識別できます。
最も一般的な用途では、2つの間のパフォーマンスギャップはごくわずかです。ただし、大きなループで頻繁に呼び出し、文字列の数が特に大きい場合、 STRPOSはケース変換プロセスがないため、わずかに高速になります。
strposとstrposの返品値を混ぜて統一された判断を下さないでください。ケースに敏感なセマンティクスに注意を払ってください。
検索ロジックがユーザーの入力に依存している場合は、可能な限りStripOSを使用してみてください。これはよりフレンドリーです。
=== falseを使用して、一致が失敗するかどうかを判断します。そうしないと、位置0で簡単に誤解されます。
関数名 | ケースに敏感かどうか | 戻り値タイプ | シナリオを使用します |
---|---|---|---|
strpos | はい | intまたはfalse | 正確に一致するシーン、厳密にはケースに敏感です |
ストリップ | いいえ | intまたはfalse | シナリオ、ケースに依存しない検索要件を緩やかに一致させます |
StrposとStrposは1つの小文字Iにすぎませんが、その背後にあるロジックは、必要な結果を見つけることができるかどうかを決定します。実際の開発では、それらを合理的に選択すると、多くのバグを回避できます。この記事があなたがそれらの違いを本当に理解するのに役立つことを願っています、そして、あなたは次回コードを書くことをheしないでください!