similar_text()
Erfahren Sie mehr über die PHP-Funktion similar_text(), die die Ähnlichkeit zwischen zwei Zeichenketten berechnet und als Prozentsatz ausgeben kann.
Die PHP-Funktion similar_text() misst, wie ähnlich zwei Zeichenketten sind. Statt eines einfachen Ja/Nein-Vergleichs zählt sie die Anzahl übereinstimmender Zeichen und kann das Ergebnis auch als Prozentsatz ausgeben. Das macht sie nützlich für unscharfe Vergleichsaufgaben wie das Erkennen nahezu doppelter Einträge, das Vorschlagen von „Meinten Sie…?"-Korrekturen oder das Sortieren von Suchergebnissen nach Ähnlichkeit.
Dieses Kapitel behandelt die Syntax, den Rückgabewert, das optionale Prozent-Argument, mögliche Fallstricke und ein ausführbares Beispiel.
Syntax
similar_text(string $string1, string $string2, float &$percent = null): intDie Funktion nimmt drei Parameter entgegen:
$string1und$string2— die beiden zu vergleichenden Zeichenketten.$percent— optional. Wenn Sie hier eine Variable übergeben, wird sie per Referenz übergeben und auf den Ähnlichkeitsprozentsatz (einfloatvon0bis100) gesetzt.
Der Rückgabewert ist eine Ganzzahl: die Anzahl übereinstimmender Zeichen zwischen den beiden Zeichenketten, ermittelt durch den rekursiv angewendeten Algorithmus der längsten gemeinsamen Teilzeichenkette.
Wie der Prozentsatz berechnet wird
Der Prozentsatz ergibt sich aus (matches * 2) / (length1 + length2) * 100. Ein Wert von 100 bedeutet, dass die Zeichenketten identisch sind, und 0 bedeutet, dass sie nichts gemeinsam haben. Da die Formel beide Längen verwendet, ist der Prozentsatz unabhängig von der Reihenfolge, in der die Zeichenketten übergeben werden.
Einfaches Beispiel
Wir initialisieren $percent zunächst mit 0, damit PHP keine Warnung über eine „undefinierte Variable" ausgibt, und übergeben sie dann per Referenz. Die Ausgabe lautet:
6
60Die beiden Zeichenketten teilen 6 übereinstimmende Zeichen (Hello — das Wort „Hello" plus das Leerzeichen), was einer Ähnlichkeit von 60 % entspricht.
Worauf man achten sollte
Die Funktion ist Groß-/Kleinschreibung-sensitiv. 'Hello' und 'hello' werden nicht als gleich behandelt — das erste Zeichen unterscheidet sich. Normalisieren Sie zuerst mit strtolower(), wenn die Groß-/Kleinschreibung ignoriert werden soll:
<?php
$a = strtolower('Hello');
$b = strtolower('hello');
similar_text($a, $b, $percent);
echo $percent; // 100
?>Die Prozentvariable muss bereits existieren. Da $percent per Referenz übergeben wird, deklarieren Sie sie vor dem Aufruf (z. B. $percent = 0;), um Warnungen zu vermeiden.
Sie ist reihenfolgeunabhängig für den Prozentsatz, aber nicht kostenlos. similar_text() ist aufwendiger als ein einfacher Vergleich, da sie einen rekursiven Algorithmus verwendet. Bei sehr langen Zeichenketten oder großen Datensätzen sollten Sie vor dem Einsatz in kritischen Pfaden eine Profilerstellung durchführen.
similar_text() vs. levenshtein()
Beide Funktionen messen die Zeichenkettenähnlichkeit, beantworten aber unterschiedliche Fragen:
similar_text()zählt übereinstimmende Zeichen und gibt einen Ähnlichkeitswert zurück — je höher, desto ähnlicher.levenshtein()zählt die Bearbeitungsschritte (Einfügungen, Löschungen, Ersetzungen), die nötig sind, um eine Zeichenkette in die andere umzuwandeln — je niedriger, desto ähnlicher.
Verwenden Sie similar_text(), wenn Sie einen prozentualen Ähnlichkeitswert benötigen; verwenden Sie levenshtein(), wenn Sie wissen möchten, wie viele Tastenanschläge zwei Zeichenketten voneinander trennen, etwa bei der Rechtschreibprüfung.
Fazit
Die Funktion similar_text() ist ein praktisches Werkzeug für unscharfe Zeichenkettenvergleiche. Sie gibt die Anzahl übereinstimmender Zeichen als Ganzzahl zurück, ermöglicht die Übergabe einer optionalen Referenzvariable für den Prozentsatz und ist Groß-/Kleinschreibung-sensitiv. Für verwandte Vergleichswerkzeuge siehe strcmp() für exakte Vergleiche, levenshtein() für die Bearbeitungsdistanz und soundex() für phonetische Übereinstimmungen.