Heim >Backend-Entwicklung >PHP-Problem >So führen Sie eine Fuzzy-Abfrage für ein Array in PHP durch

So führen Sie eine Fuzzy-Abfrage für ein Array in PHP durch

PHPz
PHPzOriginal
2023-04-26 10:28:151342Durchsuche

In der PHP-Entwicklung sind Arrays ein unvermeidlicher Teil von uns. Wenn wir Daten in einem Array abfragen müssen, verwenden wir normalerweise Fuzzy-Abfragen. In diesem Artikel wird vorgestellt, wie man Fuzzy-Abfragen von Arrays in PHP durchführt.

1. Was ist eine Array-Fuzzy-Abfrage?

Array-Fuzzy-Abfrage, d. h. eine auf Schlüsselwörtern basierende Datenabfrage, erfordert keine genaue Übereinstimmung, es müssen nur übereinstimmende Elemente zurückgegeben werden Ergebnisse. In der tatsächlichen Entwicklung werden häufig Array-Fuzzy-Abfragen verwendet, um Daten mit ähnlichen Merkmalen zu finden.

Zum Beispiel haben wir eine Kontaktgruppe, die mehrere Kontaktinformationen enthält, darunter Name, Telefonnummer, E-Mail-Adresse und andere Informationen. Wir können Fuzzy-Abfragen verwenden, um die Kontaktinformationen einer Person zu finden, oder sogar nur einen Teil eines Namens oder einer Telefonnummer eingeben, um Ergebnisse zu finden.

2. Verwenden Sie array_filter() für Fuzzy-Abfragen.

Die Funktion array_filter() von PHP kann jedes Element im Array bedingt filtern und Ergebnisse zurückgeben, die die Bedingungen erfüllen. Wir können diese Funktion verwenden, um eine Fuzzy-Abfrage von Arrays zu implementieren.

Angenommen, wir haben ein Benutzerarray, das mehrere Kontaktinformationen enthält:

$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')
);

Jetzt möchten wir die Funktion implementieren, Benutzer anhand von Schlüsselwörtern zu finden. Wir können eine Funktion definieren, Schlüsselwörter und Benutzerarrays übergeben und die Funktion array_filter() verwenden, um Elemente im Array zu filtern, die die Bedingungen erfüllen.

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;
}

Die obige Funktion führt einen Schleifenvergleich aller Benutzerinformationen durch und gibt true zurück, wenn eine Übereinstimmung gefunden wird. Die Funktion „stripos()“ kann das erste Vorkommen einer Zeichenfolge in einer anderen Zeichenfolge ohne Berücksichtigung der Groß-/Kleinschreibung abrufen.

Wir können diese Funktion aufrufen, um eine Fuzzy-Abfrage durchzuführen:

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

Diese Abfrage gibt alle Kontaktinformationen zurück, deren Telefonnummer „1111“ enthält.

Die Verwendung der Funktion array_filter() zum Implementieren von Fuzzy-Abfragen für Arrays ist einfach und benutzerfreundlich, weist jedoch auch ein Problem auf: Wenn die Datenmenge im Array groß ist, kann die Leistung beeinträchtigt werden. Zu diesem Zeitpunkt können wir eine andere Methode verwenden, um eine Fuzzy-Abfrage des Arrays zu implementieren.

3. Verwenden Sie reguläre Ausdrücke für Fuzzy-Abfragen.

Reguläre Ausdrücke sind ein Werkzeug zum Abgleichen und Ersetzen von Text. In PHP können wir die Funktion preg_grep() verwenden, um Elemente, die Bedingungen erfüllen, in einem Array basierend auf regulären Ausdrücken herauszufiltern.

Angenommen, wir haben ein Schlüsselwortarray, das mehrere Schlüsselwörter enthält:

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

Jetzt möchten wir alle Kontaktinformationen finden, die die Schlüsselwortbedingungen im Benutzerarray erfüllen. Wir können reguläre Ausdrücke verwenden, um diese Funktion zu erreichen:

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;
}

Die obige Funktion durchläuft das Schlüsselwortarray und generiert einen regulären Ausdruck für jedes Schlüsselwort. Verwenden Sie preg_grep (), um eine Übereinstimmung herzustellen, und passen Sie die Kontaktbedingungen an Informationen in ein resultierendes Array.

Wir können diese Funktion aufrufen, um eine Fuzzy-Abfrage durchzuführen:

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

Diese Abfrage gibt alle Kontaktinformationen zurück, die eine beliebige Schlüsselwortbedingung erfüllen, einschließlich Telefonnummern mit „1111“ und Kontaktinformationen enthält „san“ im Namen und „y@example“ in der E-Mail-Adresse.

Die Verwendung regulärer Ausdrücke für die Fuzzy-Abfrage von Arrays kann genauere Ergebnisse liefern, die die Bedingungen erfüllen, hat jedoch auch einen Nachteil: Die Erstellung regulärer Ausdrücke erfordert bestimmte Kenntnisse und Fähigkeiten, wenn sie nicht gut geschrieben sind , kann es schwierig werden, den Code zu verstehen und zu warten.

4. Zusammenfassung

Array-Fuzzy-Abfrage ist eine der am häufigsten verwendeten Funktionen in der PHP-Entwicklung, die uns helfen kann, schnell Elemente im Array zu finden, die Bedingungen erfüllen. In diesem Artikel werden zwei Möglichkeiten zur Implementierung einer Array-Fuzzy-Abfrage vorgestellt, nämlich die Verwendung der Funktion array_filter() und die Verwendung regulärer Ausdrücke. In der tatsächlichen Entwicklung können wir basierend auf den tatsächlichen Anforderungen eine geeignete Implementierungsmethode auswählen. Gleichzeitig sollten wir auch auf die Auswirkungen achten, die Fuzzy-Abfragen auf die Leistung haben können, und die Abfrageeffizienz so weit wie möglich optimieren.

Das obige ist der detaillierte Inhalt vonSo führen Sie eine Fuzzy-Abfrage für ein Array in PHP durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn