PHPでは、 StripOS関数を使用して、文字列が最初に別の文字列に表示される場所を見つけます(ケースを無視します)。ただし、デフォルトでは、1つのキーワードのみを見つけることができます。文字列に複数のキーワードを見つけて位置または一致を返す必要がある場合は、この関数を実装するために関数をカスタマイズする必要があります。
複数のキーワードを繰り返し、 StripoS関数を呼び出すことにより、ターゲット文字列の各キーワードの位置を確認できます。キーワードが見つかった場合、場所は記録されます。最後に、すべてのキーワードの一致結果を返すことができます。ここでは、配列を使用して検索結果を複数のキーワードに保存し、場所またはその他の関連情報を返します。
以下は、文字列内の複数のキーワードを見つけて一致する結果を返すことをサポートするシンプルなカスタム関数実装です。
<?php
/**
* カスタム関数:複数のキーワードをサポートします stripos 関数
*
* @param string $haystack ターゲット文字列
* @param array $needles 探すべきキーワードの配列
* @return array 連想配列を返します,各キーワードの場所が含まれています
*/
function multi_stripos($haystack, $needles) {
$results = [];
foreach ($needles as $needle) {
$position = stripos($haystack, $needle);
if ($position !== false) {
$results[$needle] = $position;
} else {
$results[$needle] = null; // キーワードが見つからない場合,戻る null
}
}
return $results;
}
// 例:関数を使用して、複数のキーワードを見つけます
$text = "当社のウェブサイトへようこそ,m66.net豊富なリソースを提供します。";
$keywords = ["m66.net", "リソース", "PHP"];
$matches = multi_stripos($text, $keywords);
// 出力結果
foreach ($matches as $keyword => $position) {
if ($position !== null) {
echo "キーワード '{$keyword}' 場所に {$position} 見つかった。\n";
} else {
echo "キーワード '{$keyword}' 見つかりません。\n";
}
}
?>
関数定義:
2つのパラメーターを取るMulti_Striposという関数を定義します。
$ haystack :ターゲット文字列。
$針:複数のキーワードを含む配列。
関数内で、 foreachループを使用して各キーワードを反復し、 spripos関数を呼び出して$ haystackのキーワードの最初の発生を見つけます。
キーワードが見つかった場合、結果アレイ$の結果にその位置を保存します。見つからない場合、 Nullが返され、一致がないことを示します。
関数呼び出し:
この例では、WebサイトのURLといくつかの記述テキストを含むターゲット文字列$テキストを定義します。
複数のキーワードを含む配列$キーワードを定義し、それをmulti_stripos関数に渡して、すべてのキーワードの場所を取得します。
結果出力:
返された結果アレイを横断し、各キーワードの一致する位置を出力します。キーワードが見つからない場合は、対応するプロンプト情報も出力します。
キーワード 'm66.net' 場所に 15 見つかった。
キーワード 'リソース' 場所に 22 見つかった。
キーワード 'PHP' 見つかりません。
このカスタム関数は、次の状況に非常に適しています。
複数のキーワード検索:この関数は、テキストに複数のキーワードを見つける必要がある場合に非常に便利です。
パフォーマンスの最適化: StripOSへの複数の呼び出しと比較して、この方法は複数のルックアップ操作を中央に処理することができ、それによりコードの読みやすさと保守性が向上します。
キーワードマッチングポジションの取得:位置を見つけることに加えて、関数を拡張して、一致する完全な単語やそのコンテキストなど、より多くの情報を返すこともできます。
複数のキーワード検索をサポートするStripoS関数をカスタマイズすることにより、複数のキーワードを同時に見つけるという問題を効果的に解決できます。この方法は単純であるだけでなく、柔軟性もあり、実際のニーズに応じて機能をさらに拡張できます。