Webアプリケーションを開発するときは、多くの場合、大量のデータを検索する必要があります。通常の正確な一致では、 STRPOSまたはその他の文字列関数を使用できます。ただし、ファジー検索を行う必要がある場合、PHPは非常に実用的な機能であるStriposを提供します。この関数により、文字列内のサブストリングの位置を見つけることができ、検索時にはケースに依存しません。
StripOS関数は、文字列(サブストリング)が別の文字列に最初に表示される場所を見つけるために使用されます。 Strpos関数とは異なり、 Strposは検索時にケースを無視します。これは、ターゲット文字列が大文字であろうと小文字であろうと、 Striposが一致を正しく見つけることができることを意味します。
stripos(string $haystack, string $needle, int $offset = 0): int|false
Haystack :検索するターゲット文字列。
針:見つかるサブストリング。
オフセット(オプション):ターゲット文字列の場所から検索を開始します。デフォルトは0(ゼロから開始)です。
一致が見つかった場合、 Striposは一致するサブストリングの開始位置(インデックス位置)を返し、見つかった場合はFalseを返します。
複数のユーザー向けのメールアドレスを保存するデータベースがあるとします。ユーザーが検索キーワードを入力すると、キーワードに関連するすべてのメールアドレスがファジーマッチングを通じて見つけることができることを願っています。
以下は、 StripOSを使用してファジー検索を実装する方法を示す簡単なPHP例です。
<?php
// ユーザーが入力したキーワードを検索します
$searchKeyword = "example";
// 電子メールアドレスの配列があるとします
$emailList = [
"user1@m66.net",
"user2@m66.net",
"contact@m66.net",
"admin@example.com",
"test@example.com"
];
// 一致する結果を保存します
$matchingEmails = [];
// メールアドレス配列を繰り返します,ファジー検索を実行します
foreach ($emailList as $email) {
if (stripos($email, $searchKeyword) !== false) {
$matchingEmails[] = $email;
}
}
// 出力マッチング結果
echo "一致したメールアドレス:\n";
foreach ($matchingEmails as $email) {
echo $email . "\n";
}
?>
検索キーワード$ searchKeywordを定義し、 $ emaillistのメールアドレスがあると仮定します。
Foreachを使用して、各メールアドレスを反復し、 Striposに電話してファジーマッチングを行います。一致が見つかった場合、メールアドレスが$ matchingemailsアレイに追加されます。
最後に、一致するすべてのメールアドレスを印刷します。
上記の例では、 Striposはケースを無視し、キーワードを含む電子メールアドレスを効果的に見つけることができます。
StripOS関数は、多くのファジー検索シナリオに適しています。一般的なアプリケーションには以下が含まれます。
検索エンジン:ユーザーが入力したキーワードを含むドキュメント、コンテンツ、またはレコードを見つけます。
ログ分析:多数のログファイルで特定のキーワードまたはエラーメッセージを見つけます。
コンテンツフィルタリング:不要なコンテンツを除外するか、特定のキーワードに基づいてコンテンツレビューを実行します。
パフォーマンスの問題: Scripos関数は非常に便利ですが、データボリュームが非常に大きい場合、関数への頻繁な呼び出しはパフォーマンスに影響を与える可能性があります。データベースのフルテキスト検索機能またはキャッシュテクノロジーを使用して、効率を向上させることを検討してください。
マッチング方法: Striposは症例に依存しませんが、ケースに敏感である必要がある場合は、 STRPOS関数を使用できます。
一致位置: Striposは試合の開始位置を返します。より詳細なマッチング情報を取得する必要がある場合は、他の機能と組み合わせて使用できます。