similar_text()
Notre article présente la fonction PHP similar_text(), utilisée pour calculer la similarité entre deux chaînes de caractères.
La fonction PHP similar_text() mesure à quel point deux chaînes de caractères se ressemblent. Au lieu d'une simple comparaison oui/non, elle compte le nombre de caractères correspondants et peut également exprimer cette correspondance sous forme de pourcentage. Elle est donc pratique pour les tâches de correspondance approximative, comme la détection d'entrées quasi-identiques, la suggestion de corrections « vouliez-vous dire… ? », ou le classement des résultats de recherche par proximité.
Ce chapitre couvre la syntaxe, la valeur de retour, l'argument de pourcentage optionnel, les pièges à éviter et un exemple concret que vous pouvez exécuter.
Syntaxe
similar_text(string $string1, string $string2, float &$percent = null): intLa fonction prend trois paramètres :
$string1et$string2— les deux chaînes à comparer.$percent— optionnel. Si vous fournissez une variable ici, elle est passée par référence et reçoit le pourcentage de similarité (unfloatallant de0à100).
La valeur de retour est un entier : le nombre de caractères correspondants entre les deux chaînes, trouvés à l'aide de l'algorithme de la plus longue sous-chaîne commune appliqué récursivement.
Comment le pourcentage est calculé
Le pourcentage est (matches * 2) / (length1 + length2) * 100. Ainsi, une valeur de 100 signifie que les chaînes sont identiques, et 0 signifie qu'elles n'ont rien en commun. Comme la formule utilise les deux longueurs, le pourcentage est le même quel que soit l'ordre dans lequel vous passez les chaînes.
Exemple de base
Nous initialisons d'abord $percent à 0 pour que PHP ne génère pas d'avertissement « variable indéfinie », puis nous le passons par référence. La sortie est :
6
60Les deux chaînes partagent 6 caractères correspondants (Hello — le mot « Hello » suivi de l'espace), ce qui représente une similarité de 60 %.
Points à surveiller
La fonction est sensible à la casse. 'Hello' et 'hello' ne sont pas considérés comme égaux — le premier caractère diffère. Normalisez avec strtolower() d'abord si la casse doit être ignorée :
<?php
$a = strtolower('Hello');
$b = strtolower('hello');
similar_text($a, $b, $percent);
echo $percent; // 100
?>La variable de pourcentage doit déjà exister. Puisque $percent est passé par référence, déclarez-le avant l'appel (par ex. $percent = 0;) pour éviter les avertissements.
L'ordre est sans importance pour le pourcentage, mais pas pour les performances. similar_text() est plus coûteuse qu'une simple comparaison en raison de son algorithme récursif. Pour des chaînes très longues ou de grands ensembles de données, profilez avant de l'utiliser dans des chemins critiques.
similar_text() vs. levenshtein()
Les deux fonctions mesurent la similarité entre chaînes, mais elles répondent à des questions différentes :
similar_text()compte les caractères correspondants et donne un score de similarité — plus il est élevé, plus les chaînes se ressemblent.levenshtein()compte les modifications (insertions, suppressions, substitutions) nécessaires pour transformer une chaîne en l'autre — plus il est bas, plus les chaînes se ressemblent.
Utilisez similar_text() lorsque vous souhaitez un pourcentage de proximité ; utilisez levenshtein() lorsque vous vous intéressez au nombre de frappes qui séparent deux chaînes, par exemple pour la vérification orthographique.
Conclusion
La fonction similar_text() est un outil pratique pour la comparaison approximative de chaînes. Elle retourne le nombre entier de caractères correspondants, accepte une variable de référence optionnelle pour obtenir le pourcentage, et est sensible à la casse. Pour des outils de comparaison connexes, consultez strcmp() pour la comparaison exacte, levenshtein() pour la distance d'édition, et soundex() pour la correspondance phonétique.