W3docs

similar_text()

Artigo sobre a função PHP similar_text(), usada para calcular a similaridade entre duas strings e retornar o número de caracteres correspondentes.

A função PHP similar_text() mede o quão semelhantes são duas strings. Em vez de uma comparação simples de sim/não, ela conta o número de caracteres correspondentes e também pode reportar essa correspondência como uma porcentagem. Isso a torna útil para tarefas de correspondência aproximada, como detectar entradas quase duplicadas, sugerir correções do tipo "você quis dizer...?" ou classificar resultados de pesquisa por proximidade.

Este capítulo aborda a sintaxe, o valor de retorno, o argumento opcional de porcentagem, os cuidados a ter e um exemplo prático que você pode executar.

Sintaxe

similar_text(string $string1, string $string2, float &$percent = null): int

A função recebe três parâmetros:

  • $string1 e $string2 — as duas strings a comparar.
  • $percent — opcional. Se você fornecer uma variável aqui, ela é passada por referência e definida com a porcentagem de similaridade (um float de 0 a 100).

O valor de retorno é um inteiro: o número de caracteres correspondentes entre as duas strings, encontrado usando o algoritmo de substring comum mais longa aplicado recursivamente.

Como a porcentagem é calculada

A porcentagem é (matches * 2) / (length1 + length2) * 100. Assim, um valor de 100 significa que as strings são idênticas, e 0 significa que não têm nada em comum. Como a fórmula usa ambos os comprimentos, a porcentagem é a mesma independentemente da ordem em que você passa as strings.

Exemplo básico

php— editable, runs on the server

Inicializamos $percent com 0 primeiro para que o PHP não emita um aviso de "variável indefinida", depois a passamos por referência. A saída é:

6
60

As duas strings compartilham 6 caracteres correspondentes (Hello — a palavra "Hello" mais o espaço), o que equivale a uma similaridade de 60%.

O que observar

É sensível a maiúsculas e minúsculas. 'Hello' e 'hello' não são tratados como iguais — o primeiro caractere difere. Normalize com strtolower() primeiro se as maiúsculas devem ser ignoradas:

<?php
$a = strtolower('Hello');
$b = strtolower('hello');
similar_text($a, $b, $percent);
echo $percent; // 100
?>

A variável de porcentagem deve já existir. Como $percent é passada por referência, declare-a antes da chamada (por exemplo, $percent = 0;) para evitar avisos.

É insensível à ordem para a porcentagem, mas não é gratuita. similar_text() é mais custosa do que uma comparação simples por causa do seu algoritmo recursivo. Para strings muito longas ou grandes conjuntos de dados, faça um perfil antes de depender dela em caminhos críticos.

similar_text() vs. levenshtein()

Ambas as funções medem a similaridade entre strings, mas respondem a perguntas diferentes:

  • similar_text() conta os caracteres correspondentes e fornece uma pontuação de similaridade — quanto mais alto, mais semelhante.
  • levenshtein() conta as edições (inserções, exclusões, substituições) necessárias para transformar uma string em outra — quanto mais baixo, mais semelhante.

Use similar_text() quando quiser uma porcentagem de proximidade; use levenshtein() quando se importar com quantas teclas separam duas strings, como na verificação ortográfica.

Conclusão

A função similar_text() é uma ferramenta prática para comparação aproximada de strings. Retorne a contagem inteira de caracteres correspondentes, passe uma variável de referência opcional para obter a porcentagem e lembre-se de que é sensível a maiúsculas e minúsculas. Para ferramentas de comparação relacionadas, veja strcmp() para comparação exata, levenshtein() para distância de edição e soundex() para correspondência fonética.

Prática

Prática
O que a função similar_text() faz no PHP?
O que a função similar_text() faz no PHP?
Was this page helpful?