PHPでは、 StripoS()関数を使用して、文字列が最初に別の文字列に表示され、ケースに依存しない場所を見つけます。 PHPで複数のキーワードのファジー検索を実装する場合、複数のキーワードのマッチングに対処する方法は?この問題は、StripoS()自体が複数のキーワードと一度に一致することをサポートしていないため、単一のキーワード検索のみをサポートするため、少し複雑です。
まず、 Stripos()の基本的な使用法を理解しましょう。
<?php
$haystack = "Welcome to m66.net, the best place to learn PHP!";
$needle = "m66.net";
$position = stripos($haystack, $needle);
if ($position !== false) {
echo "Found '$needle' at position $position";
} else {
echo "'$needle' not found";
}
?>
上記のコードでは、 Stripos()を使用して、弦$ haystackの$針を見つけて、その位置を返します。一致が成功した場合、文字列内のキーワードの開始位置を返します。一致に達していない場合、それは虚偽を返します。
複数のキーワードのファジー検索を実現するために、これを行う最も簡単な方法は、各キーワードをループするためにStripoS()を使用することです。キーワードの1つが見つかった場合、一致する結果を返すことができます。これを行うことができます:
<?php
$haystack = "Welcome to m66.net, the best place to learn PHP!";
$needles = ["m66.net", "PHP", "programming"];
foreach ($needles as $needle) {
$position = stripos($haystack, $needle);
if ($position !== false) {
echo "Found '$needle' at position $position\n";
} else {
echo "'$needle' not found\n";
}
}
?>
上記のコードでは、配列$針の各キーワードを順番に確認し、 StripoS()を介して一致するかどうかを検索します。キーワードが見つかった場合、一致する情報を出力します。
最初の一致のみを見つける代わりに、すべてのキーワードの場所を返したい場合は、すべてのマッチの場所を配列に保存できます。
<?php
$haystack = "Welcome to m66.net, the best place to learn PHP! Check out m66.net for more.";
$needles = ["m66.net", "PHP"];
$matches = [];
foreach ($needles as $needle) {
$position = stripos($haystack, $needle);
while ($position !== false) {
$matches[] = ["keyword" => $needle, "position" => $position];
$position = stripos($haystack, $needle, $position + 1);
}
}
if (!empty($matches)) {
foreach ($matches as $match) {
echo "Found '{$match['keyword']}' at position {$match['position']}\n";
}
} else {
echo "No matches found";
}
?>
上記のコードでは、 $ haystackに表示されるすべてのキーワードをwhile loopで検索します。試合が見つかるたびに、検索位置を更新し、次の試合を探し続けます。最後に、すべての一致する情報は$ Matchesアレイに保存され、一致する結果はすべて1つずつ出力されます。
StripOS()は非常に実用的な機能ですが、正規表現はサポートしていません。特定の特殊文字を無視したり、パターンマッチングを使用したりするなど、より複雑な一致が必要な場合は、 preg_match()がより適切な選択です。複数のキーワードを正規表現を使用して一致させる例は次のとおりです。
<?php
$haystack = "Welcome to m66.net, the best place to learn PHP!";
$needles = ["m66.net", "PHP"];
$pattern = '/(' . implode('|', $needles) . ')/i';
preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE);
if (!empty($matches[0])) {
foreach ($matches[0] as $match) {
echo "Found '{$match[0]}' at position {$match[1]}\n";
}
} else {
echo "No matches found";
}
?>
この例では、複数のキーワードを一致させるために、正規表現のpreg_match_all()関数を使用します。 Inprode( '|'、$針)は、すべてのキーワードを正規表現に連結します。 「または」を意味するため、複数のキーワードを同時に試合で見つけることができます。 preg_offset_captureオプションは、一致する特定の場所を返します。
StripOS()は非常にシンプルで効率的な機能ですが、単一のキーワードを見つけるためにのみ使用できます。複数のキーワードを見つける必要がある場合は、ループまたは正規表現で達成できます。ニーズがより複雑であるか、より柔軟なパターンマッチングが必要な場合、正規表現は強力なツールです。
上記の方法により、PHPの複数のキーワードのファジー検索を柔軟に実現し、ニーズに最適なソリューションを選択して、作業効率を向上させることができます。