Resumen: Entrega nº29 del Tutorial básico del programador web: PHP desde cero.
Codificación aprenderaprogramar.com: CU00829B 

 

 

COMPARACIÓN DE CADENAS PHP

Cuando tengamos que comparar cadenas en PHP, se recomienda hacer uso de las funciones nativas del lenguaje previstas para ello. Si se tratan de hacer comparaciones usando el operador == se pueden obtener resultados extraños. Usar el operador === puede dar mejores resultados, pero en general trataremos de usar funciones como strcmp previstas específicamente para esto.

 

 

FUNCIÓN STRCMP

Esta función realiza la comparación segura de Strings y devuelve un valor numérico. Su sintaxis habitual es la siguiente:

if (strcmp ($cadena1 , $cadena2 ) == 0) { … }

 

 

strcmp es sensible a mayúsculas y minúsculas, es decir, no considera igual Martes que martes.

La función devuelve un valor numérico que puede ser:

0: cuando ambas cadenas son iguales. En caso contrario el valor devuelto es distinto de cero, por lo que si queremos saber si dos cadenas son distintas podemos usar if (strcmp ($cadena1 , $cadena2 ) !== 0) { … }

Un valor numérico menor que 0 si la cadena 1 es menor que la cadena 2

Un valor numérico mayor que cero si la cadena 1 es mayor que la cadena 2.

 

¿Qué significa que una cadena sea mayor que otra? La comparación se hace en función de los códigos numéricos equivalentes de cada carácter. Por ejemplo la letra A tiene código numérico 65 y la letra a código numérico 97. Debido a que los códigos numéricos no permiten una ordenación alfabética precisa (al no ordenar correctamente mayúsculas y minúsculas, palabras con tilde, caracteres como la ñ, etc.), éste no es un buen medio para ordenar alfabéticamente palabras y sólo tiene una utilidad limitada.

Los parámetros aportados a la función deben ser Strings. En caso de que algún parámetro no sea una cadena de texto, el resultado que devuelve la función puede ser impredecible.

Escribe este código y visualiza los resultados que produce:

<meta charset="utf-8">

<?php //Ejemplos curso PHP aprenderaprogramar.com

$cadena1 = '1e3'; $cadena2 = '1000';

if ($cadena1 == $cadena2) {echo 'Según == las dos cadenas son iguales';}

else {echo 'Según == las dos cadenas NO son iguales'; }

echo '<br/>';

if ($cadena1 === $cadena2) {echo 'Según === las dos cadenas son iguales';}

else {echo 'Según === las dos cadenas NO son iguales'; }

echo '<br/>';

if (strcmp($cadena1, $cadena2) == 0) {echo 'Según strcmp las dos cadenas son iguales';}

else {echo 'Según strcmp las dos cadenas NO son iguales'; }

?>

 

 

El resultado será similar a este: Según == las dos cadenas son iguales, Según === las dos cadenas NO son iguales, Según strcmp las dos cadenas NO son iguales.

Recordar que para hacer comparaciones seguras de cadenas de texto usaremos strcmp u otra función PHP prevista para ello en lugar de los operadores == ó ===.

 

 

OTRAS FUNCIONES PARA COMPARAR CADENAS CON PHP

PHP define otras funciones nativas para comparar de cadenas de texto. Vamos a ver algunas de ellas:

FUNCIÓN

UTILIDAD

EJEMPLOS aprenderaprogramar.com

strcasecmp ($cadena1 , $cadena2 )

Devuelve como resultado 0 si ambas cadenas son iguales, o un valor numérico menor o mayor de cero en caso contrario. No diferencia entre mayúsculas y minúsculas.

$cadena1 = 'martes';

$cadena2 = 'Martes';

strcasecmp ($cadena1, $cadena2)

// Devuelve 0, son iguales

strncmp ($cadena1, $cadena2, $numCaract)

Compara el número de caracteres numCaract entre la cadena 1 y la cadena 2 teniendo en cuenta mayúsculas y minúsculas como diferentes.

$cadena1 = 'martes';

$cadena2 = 'Martes de feria';

strncmp ($cadena1 , $cadena2 , 6)==0

// Devuelve false, no son iguales

strncasecmp ($cadena1 , $cadena2, $numCaract)

Compara el número de caracteres numCaract entre la cadena 1 y la cadena 2 sin tener en cuenta mayúsculas y minúsculas.

$cadena1 = 'martes';

$cadena2 = 'Martes de feria';

strncasecmp ($cadena1 , $cadena2 , 6)

// Devuelve 0, son iguales

substr_compare ($cadena1, $cadena2, $posicionCad1, $opcLongitud, $opcBoolDiferencia)

Compara una subcadena de cadena 1 que comienza en posición posicionCad. Se compara hasta que una cadena termina si no se especifica opcLongitud, o el número de caracteres indicado si sí se especifica. Por defecto diferencia mayúsculas y minúsculas, pero estableciendo opcBoolDiferencia true no distinguirá entre mayúsculas y minúsculas.

$cadena1 = 'martes';

$cadena2 = 'Martes de feria';

substr_compare ($cadena1 , $cadena2 , 0, strlen($cadena1), true)

// Devuelve 0, son iguales

 

 

RELLENO DE CADENAS CON STR_PAD

Esta función realiza un relleno de cadenas ampliando la cadena hasta una longitud especificada y rellenándola con el carácter o caracteres especificados hasta dicha longitud. La sintaxis es:

str_pad ( string $cadnea , int $nuevaLongitud $opcCarRelleno, opcTipoDeRelleno)

 

 

Donde opcCarRelleno es opcional e indica el carácter o caracteres de relleno que se emplearán. Si no se especifica, se tomará el espacio en blanco como carácter de relleno.

opcTipoDeRelleno es opcional e indica cómo se rellenará hasta alcanzar la nueva longitud: por la derecha, por la izquierda o por ambos lados. Los valores que puede tomar son: STR_PAD_RIGHT, STR_PAD_LEFT, o STR_PAD_BOTH. Si no se especifica por defecto se rellenará usando STR_PAD_RIGHT (por la derecha).

Escribe este código y comprueba los resultados:

<?php

$cadena='aprenderaprogramar.com';

echo '<p>'.str_pad($cadena,28,'*').'</p>';

echo '<p>'.str_pad($cadena,48,'cool!').'</p>';

echo '<p>'.str_pad($cadena,2,'a').'</p>';

echo '<p>'.str_pad($cadena,28,'*',STR_PAD_RIGHT).'</p>';

echo '<p>'.str_pad($cadena,29,'@',STR_PAD_BOTH).'</p>';

  ?>

 

 

El resultado esperado es:

aprenderaprogramar.com******

aprenderaprogramar.comcool!cool!cool!cool!cool!c

aprenderaprogramar.com

aprenderaprogramar.com******

@@@aprenderaprogramar.com@@@@

 

Fíjate que en este caso la longitud de la cadena es de 22 caracteres. Si le ponemos que la nueva longitud es 29 y que rellene a ambos lados comienza colocando un carácter a derecha y otro a izquierda, pero tras colocar 6 sólo le queda 1 por colocar y éste carácter queda a derecha.

Existen más funciones para cadenas en PHP pero los programadores no las suelen conocer todas, ya que algunas son para tareas muy específicas. Si en algún momento necesitas realizar tareas muy específicas con cadenas en PHP puedes conocer todas las funciones existentes acudiendo a la documentación oficial de PHP sobre funciones de cadenas, disponible en  http://php.net/manual/es/ref.strings.php   

 

 

EJERCICIO

Crear archivos php que ejecuten la tarea indicada:

a) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla la cadena rellena con * a derecha e izquierda en un número de asteriscos que será siempre 5 a cada lado aunque se cambien las cadenas.

b) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla si sus tres primeros caracteres son iguales o no usando una función de comparación de subcadenas.

c) Dada la cadena "ApRendEr A proGraMar.cOm" transformar la cadena a minúsculas y rellenarla a derecha e izquierda con una longitud de asteriscos igual a la mitad de su longitud si es par ó igual a la mitad de (su longitud más 1) si es impar. Mostrar por pantalla la cadena en minúsculas y con el relleno indicado.

 

Para comprobar si tus respuestas y código son correctos puedes consultar en los foros aprenderaprogramar.com.

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

 

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

 

Descargar archivo: