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): intLa funzione accetta tre parametri:
$string1e$string2— le due stringhe da confrontare.$percent— opzionale. Se si fornisce una variabile qui, viene passata per riferimento e impostata alla percentuale di similarità (unfloatda0a100).
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
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
60Le 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.