W3docs

similar_text()

Articolo sulla funzione PHP similar_text(), usata per calcolare la similarità tra due stringhe, con esempi pratici e confronti.

La funzione PHP similar_text() misura quanto due stringhe si assomigliano. Invece di un semplice confronto sì/no, conta il numero di caratteri corrispondenti e può anche restituire tale corrispondenza come percentuale. Questo la rende utile per operazioni di corrispondenza approssimativa come il rilevamento di voci quasi duplicate, il suggerimento di correzioni "intendevi…?" o la classificazione dei risultati di ricerca per vicinanza.

Questo capitolo tratta la sintassi, il valore restituito, l'argomento percentuale opzionale, le insidie a cui prestare attenzione e un esempio pratico che puoi eseguire.

Sintassi

similar_text(string $string1, string $string2, float &$percent = null): int

La funzione accetta tre parametri:

  • $string1 e $string2 — le due stringhe da confrontare.
  • $percent — opzionale. Se si fornisce una variabile qui, viene passata per riferimento e impostata alla percentuale di similarità (un float da 0 a 100).

Il valore restituito è un intero: il numero di caratteri corrispondenti tra le due stringhe, trovato usando l'algoritmo della sottostringa comune più lunga applicato ricorsivamente.

Come viene calcolata la percentuale

La percentuale è (matches * 2) / (length1 + length2) * 100. Quindi un valore di 100 significa che le stringhe sono identiche, e 0 significa che non hanno nulla in comune. Poiché la formula usa entrambe le lunghezze, la percentuale è la stessa indipendentemente dall'ordine in cui si passano le stringhe.

Esempio base

php— editable, runs on the server

Inizializziamo $percent a 0 prima di tutto in modo che PHP non generi un avviso di "variabile non definita", poi lo passiamo per riferimento. L'output è:

6
60

Le due stringhe condividono 6 caratteri corrispondenti (Hello — la parola "Hello" più lo spazio), il che corrisponde a una similarità del 60%.

Cose a cui prestare attenzione

È sensibile alle maiuscole. 'Hello' e 'hello' non vengono trattate come uguali — il primo carattere è diverso. Normalizza con strtolower() prima se le maiuscole devono essere ignorate:

<?php
$a = strtolower('Hello');
$b = strtolower('hello');
similar_text($a, $b, $percent);
echo $percent; // 100
?>

La variabile percentuale deve già esistere. Poiché $percent viene passata per riferimento, dichiarala prima della chiamata (es. $percent = 0;) per evitare avvisi.

È insensibile all'ordine per la percentuale, ma non gratuita. similar_text() è più costosa di un semplice confronto a causa del suo algoritmo ricorsivo. Per stringhe molto lunghe o grandi dataset, fai dei benchmark prima di affidarti a essa in percorsi critici per le prestazioni.

similar_text() vs. levenshtein()

Entrambe le funzioni misurano la similarità tra stringhe, ma rispondono a domande diverse:

  • similar_text() conta i caratteri corrispondenti e fornisce un punteggio di similarità — più alto significa più simile.
  • levenshtein() conta le modifiche (inserimenti, cancellazioni, sostituzioni) necessarie per trasformare una stringa nell'altra — più basso significa più simile.

Usa similar_text() quando vuoi una percentuale di vicinanza; usa levenshtein() quando ti interessa quante battute separano due stringhe, ad esempio per il controllo ortografico.

Conclusione

La funzione similar_text() è uno strumento pratico per il confronto approssimativo di stringhe. Restituisce il conteggio intero dei caratteri corrispondenti, passa una variabile di riferimento opzionale per ottenere la percentuale e ricorda che è sensibile alle maiuscole. Per strumenti di confronto correlati, vedi strcmp() per il confronto esatto, levenshtein() per la distanza di modifica e soundex() per la corrispondenza fonetica.

Pratica

Pratica
Cosa fa la funzione similar_text() in PHP?
Cosa fa la funzione similar_text() in PHP?
Was this page helpful?