Funktion similar_text() - Die Ähnlichkeit von zwei Strings ermitteln

In PHP-Programmen müssen häufig zwei Strings miteinander verglichen werden. Eine mögliche Aufgabenstellung ist, die Ähnlichkeit zweier Zeichenketten zu ermitteln. Das kann z.B. bei einer Suchmaschine notwendig sein, wenn man aufgrund von evtl. Rechtschreibfehlern auch Suchergebnisse mit ähnlichen Begriffen ausliefern möchte. Beispielsweise könnte man festlegen, dass alle Suchergebnisse aufgelistet werden sollen, die eine Ähnlichkeit von 80% haben. Für solche Aufgaben kann man in PHP die Funktion similar_text() verwenden. Innerhalb der runden Klammern werden die folgenden Parameter angegeben.

  1. Der erste String (string, first).
  2. Der zweite String (string, second).
  3. Variable, in dem die Ähnlichkeit in Prozent gespeichert wird (percent, optional).

Der Rückgabewert der Funktion ist die Anzahl der Zeichen, die identisch sind. Beim folgenden Beispiel wird $str1 mit $str2 verglichen. Der Rückgabewert der Funktion similar_text() ist somit 1.

<?php

$str1 = 'a';
$str2 = 'a';

// Ausgabe 1
echo similar_text($str1, $str2);

?>

Kommt ein Zeichen in einem String mehrfach in dem anderen String vor, wird nicht mehrfach gezählt. Beim folgenden Beispiel ist der Rückgabewert 3, weil in $str1 3 Zeichen enthalten sind.

<?php

$str1 = 'abc';
$str2 = 'aaabbbccc';

// Ausgabe 3
echo similar_text($str1, $str2);

?>

Falls man als dritten Parameter eine Variable übergibt, wird die prozentuale Ähnlichkeit berechnet, in der Variable gespeichert und kann darüber ausgegeben werden. Für die Ausgabe muss die Funktion zuvor einmal aufgerufen werden. Beim folgenden Beispiel ist die Ähnlichkeit 100% und wird dementsprechend über die Variable $percent ausgegeben.

<?php

$str1 = 'abc';
$str2 = 'abc';
$percent = 0;

similar_text($str1, $str2, $percent);

// Ausgabe 100
echo $percent;

?>

Die Reihenfolge der Zeichen spielt für die Ermittlung der Ähnlichkeit ebenfalls eine Rolle. Beim folgenden Beispiel sind in beiden Strings die Zeichen a, b und c. Die Berechnung der Ähnlichkeit ergibt jedoch 33.33%, da die Anordnung unterschiedlich ist.

<?php

$str1 = 'abc';
$str2 = 'cba';
$percent = 0;

similar_text($str1, $str2, $percent);

// Ausgabe 33.333333333333
echo $percent;

?>

Bei Unterschieden in Groß- und Kleinschreibung werden die Zeichen nicht als ähnlich betrachtet. Beim folgenden Beispiel ergibt die Ähnlichkeit 0%, da in $str1 alle Zeichen in Kleinbuchstaben und in $str2 in Großbuchstaben geschrieben sind.

<?php

$str1 = 'abc';
$str2 = 'ABC';
$percent = 0;

similar_text($str1, $str2, $percent);

// Ausgabe 0
echo $percent;

?>

Falls Klein- und Großbuchstaben als identische Zeichen betrachtet werden sollen, kann man die Zeichenketten zuvor konvertieren, z.B. in Kleinbuchstaben. Hierfür kann man die Funktion strtolower() verwenden.

<?php

$str1 = 'abc';
$str2 = 'ABC';
$percent = 0;

$str1 = strtolower($str1);
$str2 = strtolower($str2);

similar_text($str1, $str2, $percent);

// Ausgabe 100
echo $percent;

?>

Man könnte die Zeichenketten auch in Großbuchstaben konvertieren. Hierfür eignet sich die Funktion strtoupper(), die man statt strtolower() verwenden könnte. Zwei leere Strings ergeben 0% Ähnlichkeit.

<?php

$str1 = '';
$str2 = '';
$percent = 0;

similar_text($str1, $str2, $percent);

// Ausgabe 0
echo $percent;

?>

Das Prozentzeichen kann man manuell hinzufügen, indem man es mit der Variable verkettet.