-
Notifications
You must be signed in to change notification settings - Fork 0
3 comparacion de strings en php
Indice de contenido
1. Comparación de strings con operadores | |
2. strcmp | 8. substr_compare |
3. strcasecmp | 9. similar_text |
4. strncmp | 10. levenshtein |
5. strncasecmp | 11. soundex |
6. strnatcmp | 12. metaphone |
7. strnatcasecmp |
A la hora de comparar variables, resulta sencillo cuando se trata de booleanos o de integers, pero cuando se trata de strings o partes de strings se puede complicar un poco.
La forma más común de comparar dos strings es con el operador ==. Si los dos strings son iguales, el condicional devuelve true:
if('hola' == 'hola'){
echo "El string coincide";
} else {
echo "El string no coincide";
}
Este tipo de comparación es sensible a mayúsculas y minúsculas, por lo que 'hola' == 'Hola' devolvería false.
Si todavía se quiere ser más estricto, se pueden emplear tres signos de igual, ===. De esta forma el tipo de valor del que se trata tiene que ser igual:
if( 4 === '4'){
echo "El string coincide";
} else {
echo "El string no coincide";
}
En este caso la condición resulta false, ya que son dos tipos distintos, un integer y un string. Deberían ser '4' === '4' o 4 === 4.
int strcmp (string $str1, string $str2)
Es la función más básica para comparar dos strings a nivel binario. Tiene en cuenta mayúsculas y minúsculas. Devuelve < 0 si el primer valor dado es menor que el segundo, > 0 si es al revés, y 0 si son iguales:
$var1 = "hola";
$var2 = "hola";
if (strcmp($var1, $var2) === 0){
echo "Los strings coinciden";
}
Una cadena es mayor que otra en función de los códigos numéricos equivalentes de cada carácter, por ejemplo la letra D tiene el código 68 y d el código 100. En la práctica sólo se suelen utilizar estas funciones utilizando estructuras de control condicionales respecto al valor 0, como en el ejemplo anterior y en los siguientes.
int strcasecmp (string $str1, string str2)
Idéntica a la anterior pero esta vez insensible a mayúsculas y minúsculas. Devuelve los mismos resultados:
$var1 = "Hola";
$var2 = "hola";
if (strcmp($var1, $var2) === 0){
echo "Los strings coinciden";
}
int strncmp (string $str1, string $str2, int $length)
Comparación a nivel binario de los primeros n caracteres entre strings. Es igual que strcmp(), solo que se puede especificar un límite de caracteres de cada string a comparar. Es sensible a mayúsculas y minúsculas, y devuelve el mismo tipo de resultado:
$var1 = "holG34d";
$var2 = "holaquetal";
if (strncmp($var1, $var2, 3) === 0){
echo "Los strings coinciden";
} // Coinciden, ya que hol === hol
int strncasecmp (string $str1, string $str2, int $length)
Idéntico a strncmp() pero insensible a mayúsculas y minúsculas. Devuelve lo mismo que las anteriores:
$var1 = "hoLAQG34d";
$var2 = "holaQuetal";
if (strncasecmp($var1, $var2, 5) === 0){
echo "Los strings coinciden";
} // Los strings también coinciden
int strnatcmp (string $str1, string $str2)
Compara dos strings utilizando un algoritmo de orden natural, de la forma en que un ser humano lo haría. Por ejemplo, de forma computerizada 10 va antes que 2, 22 va antes que 4... Es sensible a mayúsculas y minúsculas:
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
echo "Comparación estándar normal\n";
usort($arr1, "strcmp");
print_r($arr1);
/*
* Devuelve:
Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)
*/
echo "\nComparación con orden natural\n";
usort($arr2, "strnatcmp");
print_r($arr2);
/*
Devuelve:
Array
(
[0] => img1.png
[1] => img2.png
[2] => img10.png
[3] => img12.png
)
*/
int strnatcasecmp (string $str1, string $str2)
Versión igual a la anterior solo que ésta es insensible a mayúsculas y minúsculas.
int substr_compare (string $mainstr, string $str, int $offset [, int $length [, bool $case_insensitivity = false]])
Esta función compara el string $main_str con $str desde la posición $offset. Se puede especificar la cantidad de caracteres con $length.
$offset marca el inicio para la comparación. Si es negativo, se comienza a contar desde el final del string.
Si case_insensitivity es true, la comparación no tiene en cuenta mayúsculas y minúsculas.
Si $main_str (desde $offset) es menor que str devuelve < 0, si es mayor > 0, y si son iguales devuelve 0.
echo substr_compare("calabaza", "baza", 4, 4); // Devuelve 0 (iguales)
echo substr_compare("calabaza", "baza", 5, 4); // Devuelve -1
echo substr_compare("calabaza", "baza", 7, 4); // Devuelve -1
echo substr_compare("calabaza", "baza", -4, 4); // Devuelve 0
echo substr_compare("calabaza", "baza", -6, 4); // Devuelve 10
int similar_text (string $first, string $second [, float &$percent])
Calcula la similitud entre dos strings según el algoritmo ISBN 0-131-00413-1. Devuelve el número de caracteres que coinciden. Si se precisa un porcentaje se obtiene una medida de la similitud en %:
$var1 = 'Mi lista de la compra de ayer fue: alcachofas, calabacines y manzanas';
$var2 = 'Mi lista de la compra de hoy es: calabacines, pimientos y peras';
similar_text($var1, $var2, $porcentaje);
echo $porcentaje; // Devuelve 68.1818
Puede resultar útil a la hora de aceptar contenidos de usuario al poner un condicional con un porcentaje X para evitar duplicación de contenido, por ejemplo, ponerlo en revisión o rechazarlo si supera el 90% de similitud.
int levenshtein (string $str1, string $str2)
La distancia Levenshtein es el número mínimo de caracteres que se tienen que sustituir, insertar o borrar para transformar str1 en str2.
En la versión más sencilla de la función se obtienen los dos strings como parámetros y se calcula el número de operaciones de insertar, reemplazar y eliminar necesarias para transformar str1 en str2.
La versión más precisa toma tres parámetros adicionales que definen el costo de las operaciones de insertar, reemplazar y eliminar:
int levenshtein (string $str1, string $str2, int $costins, int $costrep, int $cost_del])
La función devuelve la distancia Levenshtein entre los dos strings o -1 si uno de los strings es mayor que el límite de 255 caracteres. El siguiente es un ejemplo con la versión sencilla:
// palabra de entrada mal escrita
$miAnimal = 'perrl';
// array de palabras a verificar
$animales = array('perro', 'gato', 'oso', 'liebre', 'ardilla', 'vaca', 'cerdo');
// aún no se ha encontrado la distancia más corta
$shortest = -1;
// bucle a través de las palabras para encontrar la más cercana
foreach ($animales as $animal) {
// calcula la distancia entre la palabra de entrada
// y la palabra actual
$lev = levenshtein($miAnimal, $animal);
// verifica por una coincidencia exacta
if ($lev == 0) {
// la palabra más cercana es esta (coincidencia exacta)
$closest = $animal;
$shortest = 0;
// salir del bucle ya que se ha encontrado una coincidencia exacta
break;
}
// si esta distancia es menor que la siguiente distancia
// más corta o si una siguiente palabra más corta aun no se ha encontrado
if ($lev <= $shortest || $shortest < 0) {
// establece la coincidencia más cercana y la distancia más corta
$closest = $animal;
$shortest = $lev;
}
}
echo "Palabra de entrada: $miAnimal\n";
if ($shortest == 0) {
echo "Palabra exacta encontrada: $closest\n";
} else {
echo "¿Quisiste decir: $closest?\n";
}
// Devuelve: Palabra de entrada: perrl ¿Quisiste decir: perro?
string soundex (string $str)
Calcula la clave soundex de un string. Las palabras pronunciadas de forma similar producen la misma clave soundex, y se usan por ejemplo para simplificar búsquedas en bases de datos cuando se conoce la pronunciación pero no como se escribe, o si se ha escrito mal un valor, encontrar el correcto en la base de datos.
Devuelve un string de 1 letra seguida de 3 números. La letra es la misma con la que empieza la palabra:
echo soundex("Mayones") . PHP_EOL;
echo soundex("Mayonaise") . PHP_EOL;
echo soundex("Maeiionis") . PHP_EOL;
echo soundex("Mayonis") . PHP_EOL;
echo soundex("Meyonis") . PHP_EOL;
echo soundex("Mayonaise") . PHP_EOL;
// Todos devuelven M520
string metaphone (string $str [, int $phonemes = 0 ])
Calcula la clave metaphone de un string. De forma similar a soundex(), crea la misma clave para palabras que suenan parecido. Es más precisa que soundex() ya que conoce las reglas básicas de la pronunciación del inglés. Las claves generadas son de longitud variable.
El valor opcional de $phonemes restringe la clave devuelta por metaphone en caracteres de longitud. Por defecto es 0 (sin restricción).
var_dump(metaphone("analyzer")); // string 'ANLSR' (length=5)
var_dump(metaphone("analyzing")); // string 'ANLSNK' (length=6)
// Utilizando phonemes
var_dump(metaphone("analyzer", 4)); // string 'ANLS' (length=4)
var_dump(metaphone("analyzing", 4)); // string 'ANLS' (length=4)
Anterior | Siguiente |
@intelguasoft - Full Stack Developer
Versión: | 0.0.3-beta |
El curso está organizado según las temáticas indicadas en la página oficial de Rogue Wave Zend para la certificación de PHP.
Esta curso no tiene ninguna relación con Zend. |
---|---|---|
Fecha: | 28.11.2018 |
Básicos
Sintaxis básicaOperadores
Operadores bit a bit
Variables
Estructuras de control
Constantes y constructores base
Espacio de nombres
Extensiones
Configuraciones
Variables al descubierto
Recolector de basuras
Rendimiento (Performance)
Funciones
FuncionesArgumentos en funciones
Funciones variables
Valores por referencia en funciones
Funciones que devuelven algo
Ámbito de variables
Funciones anónimas y closure's
Cadenas y patrones
Las comillas y las cadenas de caracteresHeredoc y Nowdoc
Comparando cadenas de caracteres
Extracción en cadenas de caracteres
Análisis en cadenas de caracteres
Reemplazos en cadenas de caracteres
Formato de cadena de caracteres
Expresiones regulares (RegEx)
Codificación de caracteres
Codificación en cadenas de caracteres
Arreglos (Array's)
ArreglosArreglos asociativos
Iterar arreglos
Funciones de arreglos
SPL Arreglos mediante objetos
Conversión de arreglos
Archivos (I/O)
Manejo de archivosLectura de archivos
Escritura de archivos
Funciones del sistema de archivos
Socket's y archivos
Streams (?)
Seguridad
Concepto y funcionamiento CGIConfigurando la seguridad
Seguridad en Sesiones
Ataques XSS
Ataques CSRF
Ataques SQLInjection
Ataques CodeInjection
Ataques EmailInjection
Filtrado de datos de entrada
Escape de datos de salida
Encriptación y contraseñas
Seguridad en el almacenamiento de datos
Seguridad en la subida de datos
SSL y OpenSSL
Base de datos
Principios básicos SQLLos joins en SQL
Principales funciones SQL
Preparando sentencias SQL
Transacciones en SQL
Algo de PDO
Programación Orientada a Objetos
Instancias de clasesModificadores y herencia de clases
Interfaces
Excepciones
Auto-carga (Autoload)
Reflexión (Reflection)
Determinación de tipos (Type hinting)
Constantes de clase
Enlace estático de ejecución (Late Static Binding)
Métodos mágicos
Librería estándar PHP (SPL)
Generadores (Generators)
Traits
Clases abstractas
Formatos de información
Algo de XMLAlgo de SimpleXML
Algo de XML Parser
Algo de PHP DOM
Algo de Web Services
Web Services con SOAP
Algo de REST
Algo de JSON
Formato de fecha y hora
Características web's
SesionesFormularios
Métodos GET y POST
Cookies
Protocolo HTTP y sus headers
Autenticación HTTP
Códigos de estado HTTP