metaphone()
Notre article présente la fonction PHP metaphone(), utilisée pour calculer la clé métaphone d'une chaîne, utile pour la recherche phonétique en PHP.
La fonction PHP metaphone() calcule la clé métaphone d'une chaîne — un code qui représente la façon dont la chaîne sonne en anglais plutôt que la façon dont elle s'écrit. Les mots prononcés de la même façon sont associés à la même clé (ou à une clé très similaire), ce qui rend metaphone() utile pour la correspondance approximative : « Catherine » et « Katherine », ou « Smith » et « Smyth », se ramènent tous à une même clé.
Obsolète depuis PHP 8.4.0.
metaphone()fonctionne encore dans PHP actuel, mais elle est en voie de suppression. Pour du nouveau code, préférez une bibliothèque phonétique maintenue (ousoundex()pour une alternative intégrée plus simple). La fonction est documentée ici car de nombreuses bases de code existantes en dépendent encore.
Cet article couvre la syntaxe, l'argument optionnel $phonemes, quelques exemples concrets et les cas d'usage réels des clés métaphone.
Syntaxe
metaphone(string $string, int $phonemes = 0): string|false| Paramètre | Description |
|---|---|
$string | La chaîne d'entrée à encoder. |
$phonemes | Optionnel. Le nombre maximum de caractères (phonèmes) à retourner. Avec 0 (valeur par défaut), la clé complète est retournée. |
La valeur de retour est la clé métaphone sous forme de chaîne en majuscules, ou false en cas d'échec.
Exemple de base
Résultat :
HLWRLTNotez que les caractères non alphabétiques comme ! et l'espace sont ignorés, et le résultat ne contient que des codes sonores de consonnes et de voyelles. La clé n'est pas destinée à être lisible par un humain — c'est une empreinte normalisée de la prononciation.
Comment la clé encode les sons
Métaphone applique les règles de prononciation anglaise, donc le résultat n'est pas une translittération directe. Quelques conventions méritent d'être connues :
- Le chiffre
0(zéro) représente le son « th ». - Les lettres muettes et les lettres doubles sont supprimées, et certaines paires de lettres se contractent (par exemple
phdevientF).
<?php
echo metaphone("Thompson"), "\n"; // 0MPSN — "Th" → 0, silent p kept by the rule
echo metaphone("Smith"), "\n"; // SM0 — trailing "th" → 0
echo metaphone("PHP"), "\n"; // FP — "ph" → F
?>Résultat :
0MPSN
SM0
FPLimiter la longueur de la clé avec $phonemes
Le second argument limite le nombre de caractères que la clé peut contenir. C'est pratique lorsque vous souhaitez uniquement comparer les premiers sons de mots longs.
<?php
echo metaphone("Thompson"), "\n"; // full key
echo metaphone("Thompson", 4), "\n"; // first 4 phonemes only
echo metaphone("Wikipedia", 4), "\n";
?>Résultat :
0MPSN
0MPS
WKPTCorrespondance de mots ayant le même son
La vraie valeur de métaphone est de regrouper différentes orthographes d'un même son. Comparons deux orthographes d'un même nom de famille :
<?php
$a = metaphone("Catherine");
$b = metaphone("Katherine");
echo $a, "\n"; // K0RN
echo $b, "\n"; // K0RN
echo $a === $b ? "Match\n" : "No\n"; // Match
?>Résultat :
K0RN
K0RN
MatchLes deux noms partageant la même clé métaphone, un index de recherche basé sur metaphone() renverrait l'un quand l'utilisateur tape l'autre — le principe des fonctionnalités « vouliez-vous dire… ? », de la déduplication de listes de contacts et de la recherche de noms tolérante.
Quand l'utiliser (et quoi utiliser à la place)
| Cas d'usage | Notes |
|---|---|
| Recherche approximative de noms / mots | Indexez la clé métaphone à côté de la valeur originale, puis faites correspondre sur la clé. |
| Recherches tolérantes à l'orthographe | Détecte les fautes de frappe phonétiques que la correspondance exacte rate. |
| Déduplication d'enregistrements | Regroupez les lignes dont les noms se prononcent de la même façon. |
metaphone() modélise uniquement la prononciation anglaise, donc elle est peu fiable pour d'autres langues. Pour la distance de fautes de frappe plutôt que le son, utilisez levenshtein() ou similar_text(). Pour un code phonétique plus simple et non obsolète, soundex() est l'alternative intégrée.
Résumé
metaphone() transforme un mot en clé phonétique afin que des mots orthographiés différemment mais sonnant de façon similaire correspondent. N'oubliez pas que la clé encode la prononciation anglaise (avec 0 représentant « th »), que l'argument optionnel $phonemes réduit la longueur de la clé, et que la fonction est obsolète depuis PHP 8.4 — préférez soundex() ou une bibliothèque maintenue dans les nouveaux projets.