W3docs

similar_text()

Artículo sobre la función PHP similar_text(), usada para calcular la similitud entre dos cadenas de texto y compararlas.

La función similar_text() de PHP mide cuán similares son dos cadenas. En lugar de una comparación simple de sí/no, cuenta el número de caracteres coincidentes y también puede informar esa coincidencia como un porcentaje. Esto la hace muy útil para tareas de coincidencia aproximada, como detectar entradas casi duplicadas, sugerir correcciones del tipo "¿quisiste decir…?" o clasificar resultados de búsqueda por cercanía.

Este capítulo cubre la sintaxis, el valor de retorno, el argumento de porcentaje opcional, las advertencias a tener en cuenta y un ejemplo práctico que puedes ejecutar.

Sintaxis

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

La función acepta tres parámetros:

  • $string1 y $string2 — las dos cadenas a comparar.
  • $percent — opcional. Si proporcionas una variable aquí, se pasa por referencia y se establece con el porcentaje de similitud (un float de 0 a 100).

El valor de retorno es un entero: el número de caracteres coincidentes entre las dos cadenas, encontrado mediante el algoritmo de subcadena común más larga aplicado de forma recursiva.

Cómo se calcula el porcentaje

El porcentaje se calcula como (matches * 2) / (length1 + length2) * 100. Por lo tanto, un valor de 100 significa que las cadenas son idénticas, y 0 significa que no comparten nada en común. Debido a que la fórmula utiliza ambas longitudes, el porcentaje es el mismo sin importar el orden en que pases las cadenas.

Ejemplo básico

php— editable, runs on the server

Primero inicializamos $percent a 0 para que PHP no genere una advertencia de "variable no definida", luego la pasamos por referencia. La salida es:

6
60

Las dos cadenas comparten 6 caracteres coincidentes (Hello — la palabra "Hello" más el espacio), lo que representa una similitud del 60%.

Aspectos a tener en cuenta

Es sensible a mayúsculas y minúsculas. 'Hello' y 'hello' no se tratan como iguales — el primer carácter difiere. Normaliza con strtolower() primero si las mayúsculas deben ignorarse:

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

La variable de porcentaje debe existir previamente. Dado que $percent se pasa por referencia, declárala antes de la llamada (por ejemplo, $percent = 0;) para evitar advertencias.

Es insensible al orden para el porcentaje, pero no es gratuita. similar_text() es más costosa que una comparación simple debido a su algoritmo recursivo. Para cadenas muy largas o grandes conjuntos de datos, realiza pruebas de rendimiento antes de usarla en rutas críticas.

similar_text() vs. levenshtein()

Ambas funciones miden la similitud entre cadenas, pero responden preguntas distintas:

  • similar_text() cuenta los caracteres coincidentes y proporciona una puntuación de similitud — cuanto mayor, más parecidas son.
  • levenshtein() cuenta las ediciones (inserciones, eliminaciones, sustituciones) necesarias para convertir una cadena en la otra — cuanto menor, más parecidas son.

Usa similar_text() cuando quieras un porcentaje de cercanía; usa levenshtein() cuando te importe cuántas pulsaciones de teclas separan dos cadenas, por ejemplo para la corrección ortográfica.

Conclusión

La función similar_text() es una herramienta práctica para la comparación aproximada de cadenas. Devuelve el conteo entero de caracteres coincidentes, pasa una variable de referencia opcional para obtener el porcentaje y recuerda que es sensible a mayúsculas y minúsculas. Para herramientas de comparación relacionadas, consulta strcmp() para comparación exacta, levenshtein() para distancia de edición y soundex() para coincidencia fonética.

Práctica

Práctica
¿Qué hace la función similar_text() en PHP?
¿Qué hace la función similar_text() en PHP?
Was this page helpful?