PHPでは、 StripoS()は非常に一般的な関数であり、1つの文字列にケースに依存しない別のサブストリングを見つけるために使用されます。この関数の基本的な使用法は非常に単純ですが、その3番目のパラメーターである$ offsetは、しばしば無視または誤用されます。
この記事では、$ offsetパラメーター、使用シナリオ、および文字列検索の効率を最適化するために使用する方法の役割を詳細に紹介します。
構文は次のとおりです。
int|false stripos(string $haystack, string $needle, int $offset = 0)
$ haystack :検索する文字列。
$針:見つかるサブストリング。
$ offset (オプション):検索を開始する場所。
戻り値:見つかった場合、最初の発生位置(0から始まる)を返します。見つからない場合は、 falseを返します。
注: StripOS()は症例に敏感ですが、 Strpos()は症例に敏感です。
$ offsetは、文字列の先頭から始まる(つまり、位置0)サブストリングを探す場所を指定します。
これは、次のシナリオで特に役立ちます。
たとえば、テキストの段落から2度目に表示されるキーワードを見つけたいとします。
$text = "訪問してください m66.net,私たちのウェブサイトはです https://m66.net/page。";
$firstPos = stripos($text, "m66.net");
if ($firstPos !== false) {
// 最初に登場した後、2回目を探し始めます
$secondPos = stripos($text, "m66.net", $firstPos + 1);
echo "2回目は次のとおりです:$secondPos";
}
出力:
2回目は次のとおりです:22
$ offset = $ firstpos + 1を設定することにより、最初に表示される重複マッチを避けます。
いくつかの長い文字列で複数の同一のサブストリングを探している場合、「パジネート検索」のループと$ offsetを組み合わせることができます。
$content = "リンクをクリックします https://m66.net/a,もう一度クリックします https://m66.net/b,最後の訪問 https://m66.net/c";
$needle = "https://m66.net/";
$offset = 0;
while (($pos = stripos($content, $needle, $offset)) !== false) {
echo "場所を見つけます:$pos\n";
$offset = $pos + strlen($needle); // 後で検索し続けます
}
出力:
場所を見つけます:6
場所を見つけます:26
場所を見つけます:47
この方法は、データ分析、テキスト処理、ログ分析における複数の同一のキーワードの配置に特に適しています。
テキストの特定の部分が無関係であることをすでに知っている場合、または後半にのみ興味がある場合、 $ offsetを使用することでパフォーマンスを大幅に改善し、特に長い文字列を扱う場合は不必要なマッチングの試みを避けることができます。
$largeText = file_get_contents('large_text.txt');
$offset = strpos($largeText, 'テキストを開始します');
if ($offset !== false) {
$startSearchFrom = $offset + strlen('テキストを開始します');
$pos = stripos($largeText, 'キーワード', $startSearchFrom);
echo "キーワード出现的位置:$pos";
}
ゼロからの検索と比較して、関連していない領域である検索をスキップすることは、より効率的でリソース節約です。
負のオフセット:負の値を使用できますが、ほとんどのシナリオで予期しない動作につながります。目的を本当に理解していない限り、このように使用することはお勧めしません。
$ offsetを無視すると、重複する一致が発生します。ターゲットの複数の発生を見つける必要がある場合は、必ず$ offsetを設定してください。そうしないと、常に最初の発生場所に戻ります。
StripOS()関数の$ offsetパラメーターは、強力ですが、しばしば見過ごされがちな機能です。 $ offsetを合理的に使用すると、コードがより効率的かつ柔軟になります。複数回表示されるサブストリングを探している場合でも、処理されたコンテンツをスキップする場合でも、$ offsetは役に立ちます。
次回検索関連のロジックを書くときは、停止して考えることもできます。 $ offsetを追加する必要がありますか?