Signatur
Beschreibung
soundex() implementiert den Soundex-Algorithmus, der einen vierstelligen Code erzeugt, der die ungefähre Aussprache eines englischen Worts repräsentiert. Der Code besteht aus dem ersten Buchstaben des Worts gefolgt von drei Ziffern, die ähnlich klingende Konsonanten gruppieren.
Der Algorithmus ist besonders nützlich, wenn man Namen oder Begriffe trotz unterschiedlicher Schreibweisen miteinander vergleichen möchte – zum Beispiel bei der Suche in Datenbanken, wo Tippfehler oder Schreibvarianten auftreten können. Zwei Wörter, die ähnlich klingen, erhalten den gleichen Soundex-Code.
Wichtig: Soundex ist für die englische Sprache optimiert und funktioniert für deutschsprachige oder andere nicht-englische Begriffe oft nur eingeschränkt. Für phonetische Suche in deutschsprachigen Anwendungen empfiehlt sich stattdessen die Verwendung von metaphone() oder spezialisierten Bibliotheken wie dem Kölner Phonetik-Algorithmus.
- Robert = R163
- Rupert = R163
- Rubin = R150
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Das Eingabewort, für das der Soundex-Code berechnet werden soll. Es wird nur der erste Buchstabe sowie Konsonanten berücksichtigt; Vokale werden (außer am Anfang) ignoriert. |
Rückgabewert
R163). Bei einem leeren String wird ein leerer String zurückgegeben.Beispiele
Grundlegende Verwendung von soundex()
<?php
$woerter = ['Robert', 'Rupert', 'Rubin', 'Ashcraft', 'Ashcroft'];
foreach ($woerter as $wort) {
echo $wort . ' => ' . soundex($wort) . PHP_EOL;
}
Phonetische Namenssuche in einer Datenbank
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$suchname = 'Müller';
$soundexCode = soundex($suchname);
// Namen mit ähnlichem Klang finden
$stmt = $pdo->prepare(
'SELECT name FROM kunden WHERE SOUNDEX(name) = :code'
);
$stmt->execute([':code' => $soundexCode]);
$treffer = $stmt->fetchAll(PDO::FETCH_COLUMN);
echo 'Ähnliche Namen zu "' . htmlspecialchars($suchname) . '" (Soundex: ' . $soundexCode . ')' . PHP_EOL;
foreach ($treffer as $name) {
echo ' - ' . htmlspecialchars($name) . PHP_EOL;
}
Soundex-Vergleich zweier Wörter
<?php
function klingtAehnlich(string $a, string $b): bool {
return soundex($a) === soundex($b);
}
var_dump(klingtAehnlich('Smith', 'Smythe')); // true
var_dump(klingtAehnlich('Robert', 'Rupert')); // true
var_dump(klingtAehnlich('Schmidt', 'Smith')); // false
// Wichtig · Fallstricke
Sprachliche Einschränkung: Der Soundex-Algorithmus wurde für englische Wörter entwickelt. Bei deutschen, französischen oder anderen Sprachen mit Umlauten oder anderen Sonderbuchstaben liefert er oft unpassende Ergebnisse. Für deutschsprachige Anwendungen sollte metaphone() oder eine externe Bibliothek (z. B. Kölner Phonetik) bevorzugt werden.
Kollisionen: Da der Code nur vier Zeichen lang ist, können völlig verschiedene Wörter denselben Soundex-Code erhalten. Soundex sollte daher nie als einziges Suchkriterium verwendet werden, sondern immer in Kombination mit anderen Filtern.
MySQL und andere Datenbanksysteme implementieren SOUNDEX() nativ, was effiziente Datenbankabfragen auf Basis des Soundex-Codes ermöglicht – achte jedoch darauf, dass die Implementierungen geringfügig abweichen können.