ホームページ >バックエンド開発 >PHPの問題 >PHPで配列に対してファジークエリを実行する方法

PHPで配列に対してファジークエリを実行する方法

PHPz
PHPzオリジナル
2023-04-26 10:28:151342ブラウズ

PHP 開発において、配列は避けられない部分です。配列内のデータをクエリする必要がある場合、通常はファジー クエリを使用します。この記事では、PHP で配列のあいまいクエリを実行する方法を紹介します。

1. 配列ファジー クエリとは

配列ファジー クエリ、つまりキーワードに基づくデータ クエリでは、完全一致は必要なく、一致する項目のみが結果を返す必要があります。実際の開発では、類似した特性を持つデータを見つけるために配列ファジー クエリがよく使用されます。

たとえば、名前、電話番号、電子メール アドレス、その他の情報を含む複数の連絡先情報を含む連絡先グループがあります。ファジー クエリを使用して個人の連絡先情報を検索したり、名前や電話番号の一部のみを入力して結果を検索したりすることもできます。

2. ファジー クエリには array_filter() を使用します

PHP の array_filter() 関数は、配列内の各要素を条件付きでフィルターし、条件を満たす結果を返すことができます。この関数を使用して、配列のファジー クエリを実装できます。

複数の連絡先情報を含む users 配列があるとします。

$users = array(
    array('name' => '张三', 'phone' => '13811112222', 'email' => 'zhangsan@example.com'),
    array('name' => '李四', 'phone' => '13911113333', 'email' => 'lisi@example.com'),
    array('name' => '王五', 'phone' => '15011112222', 'email' => 'wangwu@example.com'),
    array('name' => '赵六', 'phone' => '18011114444', 'email' => 'zhaoliu@example.com')
);

次に、キーワードに基づいてユーザーを検索する関数を実装したいと思います。関数を定義し、キーワードとユーザー配列を渡し、array_filter() 関数を使用して条件を満たす配列内の要素をフィルターできます。

function search_users($keyword, $users) {
    $result = array_filter($users, function($user) use ($keyword) {
        foreach($user as $value) {
            if(stripos($value, $keyword) !== false) {
                return true;
            }
        }
        return false;
    });
    return $result;
}

上記の関数は、各ユーザー情報のループ比較を実行し、一致するものが見つかった場合に true を返します。 Stripeos() 関数は、大文字と小文字を区別せずに、別の文字列内で最初に出現した文字列を取得できます。

この関数を呼び出してファジー クエリを実行できます:

$search_result = search_users('1111', $users);

このクエリは、電話番号に「1111」が含まれるすべての連絡先情報を返します。

array_filter() 関数を使用して配列に対するファジー クエリを実装することはシンプルで使いやすいですが、問題もあります。配列内のデータ量が多い場合、パフォーマンスに影響する可能性があります。現時点では、別の方法を使用して配列のファジー クエリを実装できます。

3.あいまいクエリには正規表現を使用する

正規表現は、テキストの一致と置換に使用されるツールです。 PHP では、preg_grep() 関数を使用して、正規表現に基づいて配列内の条件を満たす要素をフィルターで除外できます。

複数のキーワードを含むキーワード配列があるとします。

$keywords = array('1111', 'san', 'y@example');

次に、users 配列内のキーワード条件を満たすすべての連絡先情報を検索したいとします。正規表現を使用してこの機能を実現できます。

function search_users_regex($keywords, $users) {
    $result = array();
    foreach ($keywords as $keyword) {
        $pattern = '/' . preg_quote($keyword, '/') . '/i'; // i表示不区分大小写
        // preg_grep()返回满足条件的元素的数组
        $matches = preg_grep($pattern, $users);
        $result = array_merge($result, $matches);
    }
    return $result;
}

上記の関数は、キーワード配列をループし、各キーワードの正規表現を生成し、preg_grep() を使用して照合し、適格な個人情報がマージされるように連絡します。結果の配列に変換されます。

この関数を呼び出してファジー クエリを実行できます:

$search_result = search_users_regex($keywords, $users);

このクエリは、「1111」を含む電話番号や「さん」を含む名前など、キーワード条件を満たすすべての連絡先情報を返します。メールアドレスには「y@example」の連絡先情報が含まれています。

正規表現を使用して配列に対してファジー クエリを実行すると、条件を満たす結果をより正確に見つけることができますが、正規表現の構築には一定の知識とスキルが必要であるという欠点もあります。コードの理解と保守が困難になる可能性があります。

4. 概要

配列ファジー クエリは、PHP 開発でよく使用される関数の 1 つで、条件を満たす配列要素をすばやく見つけるのに役立ちます。この記事では、配列ファジー クエリを実装する 2 つの方法、つまり array_filter() 関数を使用する方法と正規表現を使用する方法を紹介します。実際の開発では、実際のニーズに基づいて適切な実装方法を選択できます。同時に、ファジー クエリがパフォーマンスに与える影響にも注意し、クエリの効率を可能な限り最適化する必要があります。

以上がPHPで配列に対してファジークエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。