similar_text
funkcja
Oblicza liczbę wspólnych znaków dwóch ciągów. Opcjonalnie zwraca przez referencję procent podobieństwa. Kolejność argumentów wpływa na wynik.
similar_text(string $string1, string $string2, float &$percent = null): int
similar_text zwraca liczbę wspólnych znaków dwóch ciągów (nie jest to zwykła liczba trafień — funkcja szuka najdłuższych wspólnych podciągów rekurencyjnie). Opcjonalny trzeci argument $percent wypełniany jest przez referencję procentowym podobieństwem: 2 * wspólne / (długość1 + długość2) * 100.
<?php
declare(strict_types=1);
$wpisane = 'poes';
$oczekiwane = 'pies';
$wspolne = similar_text($wpisane, $oczekiwane, $procent);
echo $wspolne; // wynik: 3
echo round($procent, 1); // wynik: 75.0
if ($procent >= 70) {
echo 'Czy chodziło Ci o: ' . htmlspecialchars($oczekiwane) . '?';
}
Dwa ważne zachowania do zapamiętania:
- Kolejność ma znaczenie —
similar_text('a', 'b')isimilar_text('b', 'a')mogą dać różny wynik procentowy (algorytm nie jest symetryczny). - Funkcja działa na bajtach, nie na znakach Unicode — dla polskich liter (wielobajtowych w UTF-8) wyniki mogą być nieoczekiwane.
Funkcja nadaje się do prostych podpowiedzi ortograficznych lub fuzzy matchingu słów kluczowych. Do poważniejszych zastosowań (np. wyszukiwarki) lepiej sprawdzi się levenshtein lub silniki pełnotekstowe.