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:

  1. Kolejność ma znaczeniesimilar_text('a', 'b') i similar_text('b', 'a') mogą dać różny wynik procentowy (algorytm nie jest symetryczny).
  2. 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.

📘 Naucz się w lekcji →