W3docs

metaphone()

Artículo sobre la función PHP metaphone(), que calcula la clave metafonética de una cadena. Útil para trabajar con cadenas en PHP.

La función metaphone() de PHP calcula la clave metafonética de una cadena — un código que representa cómo suena la cadena en inglés en lugar de cómo se escribe. Las palabras que se pronuncian de forma similar se asignan a la misma clave (o muy parecida), lo que hace que metaphone() sea útil para la coincidencia difusa: "Catherine" y "Katherine", o "Smith" y "Smyth", todas colapsan en una sola clave.

Obsoleta desde PHP 8.4.0. metaphone() aún funciona en la versión actual de PHP, pero está en camino a ser eliminada. Para código nuevo, se recomienda usar una biblioteca fonética mantenida (o soundex() como alternativa integrada más sencilla). La función está documentada aquí porque muchas bases de código existentes todavía dependen de ella.

Este artículo cubre la sintaxis, el argumento opcional $phonemes, algunos ejemplos prácticos y los casos en los que las claves metafonéticas son realmente útiles.

Sintaxis

metaphone(string $string, int $phonemes = 0): string|false
ParámetroDescripción
$stringLa cadena de entrada a codificar.
$phonemesOpcional. El número máximo de caracteres (fonemas) a devolver. Cuando es 0 (el valor predeterminado), se devuelve la clave completa.

El valor de retorno es la clave metafonética como una cadena en mayúsculas, o false en caso de error.

Ejemplo básico

php— editable, runs on the server

Salida:

HLWRLT

Nótese que los caracteres no alfabéticos como ! y el espacio son ignorados, y el resultado consiste únicamente en códigos de sonidos consonánticos y vocálicos. La clave no está pensada para ser legible por humanos — es una huella digital normalizada de la pronunciación.

Cómo la clave codifica los sonidos

Metaphone aplica reglas de pronunciación del inglés, por lo que la salida no es una transliteración uno a uno. Conviene conocer un par de convenciones:

  • El dígito 0 (cero) representa el sonido "th".
  • Las letras silenciosas y duplicadas se eliminan, y algunos pares de letras se fusionan (por ejemplo, ph se convierte en F).
<?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
?>

Salida:

0MPSN
SM0
FP

Limitar la longitud de la clave con $phonemes

El segundo argumento limita cuántos caracteres puede contener la clave. Esto es útil cuando solo se desea comparar los primeros sonidos de palabras largas.

<?php
echo metaphone("Thompson"), "\n";    // full key
echo metaphone("Thompson", 4), "\n"; // first 4 phonemes only
echo metaphone("Wikipedia", 4), "\n";
?>

Salida:

0MPSN
0MPS
WKPT

Hacer coincidir palabras que suenan igual

El verdadero valor de metaphone es agrupar diferentes grafías del mismo sonido. Compara dos formas de escribir el mismo apellido:

<?php
$a = metaphone("Catherine");
$b = metaphone("Katherine");

echo $a, "\n";                       // K0RN
echo $b, "\n";                       // K0RN
echo $a === $b ? "Match\n" : "No\n"; // Match
?>

Salida:

K0RN
K0RN
Match

Dado que ambos nombres comparten una clave metafonética, un índice de búsqueda basado en metaphone() devolvería uno cuando el usuario escribiera el otro — la base de las funciones de "¿quisiste decir…?", la deduplicación de listas de contactos y la búsqueda tolerante de nombres.

Cuándo usarlo (y qué usar en su lugar)

Caso de usoNotas
Búsqueda difusa de nombres o palabrasIndexa la clave metafonética junto al valor original y luego busca por clave.
Búsquedas tolerantes a errores ortográficosCaptura errores tipográficos fonéticos que la coincidencia exacta no detecta.
Deduplicación de registrosAgrupa filas cuyos nombres suenan igual.

metaphone() solo modela la pronunciación del inglés, por lo que no es fiable para otros idiomas. Para medir distancia tipográfica en lugar de sonido, utiliza levenshtein() o similar_text(). Para un código fonético más sencillo y no obsoleto, soundex() es la alternativa integrada.

Resumen

metaphone() convierte una palabra en una clave fonética para que palabras con diferente ortografía pero sonido similar coincidan. Recuerda que la clave codifica la pronunciación en inglés (con 0 representando "th"), que el argumento opcional $phonemes limita la longitud de la clave, y que la función está obsoleta desde PHP 8.4 — usa soundex() o una biblioteca mantenida en proyectos nuevos.

Práctica

Práctica
¿Cuál es el propósito de la función metaphone() en PHP?
¿Cuál es el propósito de la función metaphone() en PHP?
Was this page helpful?