W3docs

metaphone()

Artigo sobre a função PHP metaphone(), usada para calcular a chave metafone de uma string, útil para correspondência fonética de palavras.

A função PHP metaphone() calcula a chave metafone de uma string — um código que representa como a string soa em inglês, e não como é escrita. Palavras que são pronunciadas de forma semelhante são mapeadas para a mesma chave (ou muito similar), o que torna metaphone() útil para correspondência aproximada: "Catherine" e "Katherine", ou "Smith" e "Smyth", colapsam todas sobre uma única chave.

Descontinuada desde o PHP 8.4.0. metaphone() ainda funciona no PHP atual, mas está a caminho de ser removida. Para novo código, prefira uma biblioteca fonética mantida (ou soundex() para uma alternativa embutida mais simples). A função está documentada aqui porque muitas bases de código existentes ainda dependem dela.

Este artigo aborda a sintaxe, o argumento opcional $phonemes, alguns exemplos práticos e onde as chaves metafone são realmente úteis.

Sintaxe

metaphone(string $string, int $phonemes = 0): string|false
ParâmetroDescrição
$stringA string de entrada a ser codificada.
$phonemesOpcional. O número máximo de caracteres (fonemas) a retornar. Quando 0 (o padrão), a chave completa é retornada.

O valor de retorno é a chave metafone como uma string em maiúsculas, ou false em caso de falha.

Exemplo básico

php— editable, runs on the server

Saída:

HLWRLT

Observe que caracteres não-alfabéticos como ! e o espaço são ignorados, e o resultado é composto puramente de códigos de sons de consoantes e vogais. A chave não se destina a ser legível por humanos — é uma impressão digital normalizada da pronúncia.

Como a chave codifica os sons

O Metaphone aplica regras de pronúncia do inglês, portanto a saída não é uma transliteração um-para-um. Algumas convenções valem a pena conhecer:

  • O dígito 0 (zero) representa o som "th".
  • Letras silenciosas e duplicadas são descartadas, e alguns pares de letras colapsam (por exemplo, ph torna-se 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
?>

Saída:

0MPSN
SM0
FP

Limitando o comprimento da chave com $phonemes

O segundo argumento limita quantos caracteres a chave pode conter. Isso é útil quando você quer comparar apenas os primeiros sons de palavras longas.

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

Saída:

0MPSN
0MPS
WKPT

Correspondendo palavras com sons semelhantes

O valor real do metaphone é agrupar diferentes grafias do mesmo som. Compare duas grafias do mesmo sobrenome:

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

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

Saída:

K0RN
K0RN
Match

Como ambos os nomes compartilham uma chave metafone, um índice de busca baseado em metaphone() retornaria um quando o usuário digitasse o outro — a base dos recursos "você quis dizer…?", deduplicação de listas de contatos e busca tolerante por nomes.

Quando usá-la (e o que usar no lugar)

Caso de usoObservações
Busca aproximada de nomes/palavrasIndexe a chave metafone junto ao valor original e depois faça a correspondência pela chave.
Buscas tolerantes a erros ortográficosCaptura erros de digitação fonéticos que a correspondência exata não detecta.
Deduplicação de registrosAgrupe linhas cujos nomes soam iguais.

metaphone() modela apenas a pronúncia do inglês, portanto é pouco confiável para outros idiomas. Para distância de erros tipográficos em vez de som, recorra a levenshtein() ou similar_text(). Para um código fonético mais simples e não descontinuado, soundex() é a alternativa embutida.

Resumo

metaphone() transforma uma palavra em uma chave fonética para que palavras com grafias diferentes, mas sons semelhantes, correspondam. Lembre-se de que a chave codifica a pronúncia em inglês (com 0 representando "th"), que o argumento opcional $phonemes reduz o comprimento da chave e que a função está descontinuada a partir do PHP 8.4 — prefira soundex() ou uma biblioteca mantida em novos projetos.

Prática

Prática
Qual é o propósito da função metaphone() no PHP?
Qual é o propósito da função metaphone() no PHP?
Was this page helpful?