2016-12-25 1 views
0

Ich möchte ein Skript schreiben, das mir einen Wert geben kann, der nicht genau ist, aber nahe am vom Benutzer eingegebenen Wert liegt. Zum Beispiel: Es ist wie ein String-Vergleich. Vergleichen von Zeichen der Benutzerabfrage.Sie müssen ein PHP-Skript schreiben, das einen Wert nahe dem vom Benutzer eingegebenen Wert anzeigt.

Daten werden in SQL gespeichert. Zum Beispiel:

$string1="Where were you"; 
$string2="where ere youuu"; 

$string1 ist Wert in der Datenbank gespeichert.

$string 2 ist Benutzerwert.

Es sollte Ausgabe wie folgt zurück:

where were you 

ich dies tun, aber es funktioniert nicht gut für mich:

$a = "hello where are you"; 
$b = "hell re r u"; $str = ""; 

for ($i=0; $i < strlen($a); $i++) { 
    for ($j=0; $j < strlen($b); $j++) { 
     if ($a[$i]==$b[$j]) { 
      $str.=$a[$i]; 
      break; 
     } 
    } 
} 
echo $str; 

Es ist nicht die gewünschten Ergebnisse geben.

+1

Es gibt eine Vielzahl von Ansätzen dazu, wie verschiedene String-Vergleichsalgorithmen den „Abstand“ zwischen zwei Strings zu bestimmen, oder die Verwendung von Dingen wie „soundex“ (https://en.wikipedia.org/wiki/Soundex). – David

+1

Wie definieren Sie ein "genaues Ergebnis"? Das ist keine triviale Sache. – kabanus

+0

Ich denke, was Sie wollen, ist eine sehr ernste Suchlogik und sicher wird es nicht mit zwei 'for' Zyklen passieren. Versuchen Sie, Google nach einer Art Volltextsuche zu durchsuchen. Gib uns einige weitere Details. Wenn Daten auf SQL-Server sind, versuchen Sie, die Zeichenfolge in Stücke zu teilen und ein 'LIKE' zu machen – codtex

Antwort

0

Ich hatte mit einem ähnlichen Problem zu tun, wo Benutzereingabe Rechtschreibfehler und Teilwörter haben könnte.

Ich versuchte, Soundex-Funktion von PHP zu verwenden, aber in meiner Erfahrung führt es zu vielen falschen positiven Ergebnissen. Dann habe ich die Metaphon-Funktion ausprobiert und es hat viel besser funktioniert als soundex. Dann gibt es auch die levenshtein-Funktion, die Abstände zwischen zwei Strings berechnet, die Ihnen die Anzahl der Zeichen gibt, die Sie hinzufügen, entfernen oder ändern müssen, um eine Zeichenfolge von einer anderen zu erhalten. Sie können eine Kombination aus diesen verwenden, um genauere Ergebnisse zu erhalten.

Die 100% ige Genauigkeit ist jedoch, soweit ich weiß, nicht für alle Benutzereingaben möglich. Für einige Benutzereingaben könnten Sie ein 100% genaues Ergebnis liefern, und für andere Benutzer könnten Sie die Benutzeroptionen zur Auswahl bereitstellen.

Referenzseiten: soundex, metaphone und levenshtein

Verwandte Themen