levenshtein
funkcja
Oblicza odległość edycyjną między dwoma ciągami — minimalną liczbę wstawień, usunięć i zamian znaków potrzebnych do przekształcenia jednego w drugi.
levenshtein(string $string1, string $string2): int
levenshtein zwraca odległość Levenshteina — minimalną liczbę operacji (wstawienie, usunięcie, zamiana jednego znaku), które przekształcą $string1 w $string2. Im mniejsza wartość, tym bardziej podobne ciągi. Wynik 0 oznacza identyczne ciągi.
<?php
declare(strict_types=1);
$wpisane = 'wiadmosc'; // literówka: brakuje 'o'
$poprawne = 'wiadomosc';
$dystans = levenshtein($wpisane, $poprawne);
echo $dystans; // wynik: 1
if ($dystans <= 2) {
echo 'Czy miałeś na myśli: ' . htmlspecialchars($poprawne) . '?';
}
Dobór progu: wartość <= 1 to zwykła literówka (jeden klawisz), <= 2 to niewielkie podobieństwo, >= 3 ciągi są już mocno różne.
Uwaga na UTF-8.
levenshteinw PHP liczy operacje na bajtach, nie na znakach. Polska litera jakózajmuje 2 bajty w UTF-8, więc zamianakot→kótdaje dystans2, nie1. Jeśli walidujesz polskie teksty, rozważ wcześniejszą transliterację (iconv) lub dedykowaną bibliotekę obsługującą znaki wielobajtowe.