7. Algunas funciones útiles ya incluidas en PHP
PHP
7. Algunas funciones útiles ya incluidas en PHP
7.1. Manipulación de cadenas de texto
Vamos a ver un ejemplo que incluya algunas de las funciones de uso más habitual, y luego comentaremos algo sobre cada tipo de función:
<html>
<body>
<?php
$frase="EjEMplo de FRASE";
echo "Texto original: " . $frase . "<br />\\n";
echo "Mayusculas: " . strtoupper($frase) . "<br />\\n";
echo "Minusculas: " . strtolower($frase) . "<br />\\n";
echo "Palabras en mayusculas: " . ucwords($frase) . "<br />\\n";
echo "Palabras en mayusculas y resto en minúsculas: " .
ucwords(strtolower($frase)) . "<br />\\n";
// La siguiente, solo en PHP 5.30 o superior
// echo "Primera en minusculas: " . lcfirst($frase) . "<br />\\n";
echo "Palabras sin espacios: " . str_replace(" ", "", $frase) . "<br />\\n";
echo "Longitud: " . strlen($frase) . "<br />\\n";
echo "Primera letra: " . $frase[0] . "<br />\\n";
echo "\\"de\\" esta en la posicion: " . strpos($frase, "de") . "<br />\\n";
echo "Palabras individuales:<br />\\n";
$palabras = explode(" ", $frase);
foreach ($palabras as $unaPalabra)
echo "- " . $unaPalabra . "<br />\\n";
$nuevaFrase = implode("-", $palabras);
echo "Vuelto a juntar: " . $nuevaFrase . "<br />\\n";
echo "Al reves: " . strrev($frase) . "<br />\\n";
$caracteresEspeciales = "<hola> &tal";
echo "Una frase con caracteres especiales: "
. htmlspecialchars($caracteresEspeciales) . "<br />\\n";
$fraseLarga = "Ejemplo de una frase mas larga, que vamos a partir en varias lineas";
echo "Frase partida: <br />\\n"
. wordwrap($fraseLarga, 15, "<br />\\n");
$conEspacios = " de ";
echo "<br />\\n";
echo "Sin espacios iniciales: -" . ltrim($conEspacios) . "-<br />\\n";
echo "Sin espacios finales: -" . rtrim($conEspacios) . "-<br />\\n";
echo "Sin espacios iniciales ni finales: -" . trim($conEspacios) . "-<br />\\n";
?>
</body>
</html>
Y se mostraría en pantalla algo como:
Texto original: EjEMplo de FRASE
Mayusculas: EJEMPLO DE FRASE
Minusculas: ejemplo de frase
Palabras en mayusculas: EjEMplo De FRASE
Palabras en mayusculas y resto en minúsculas: Ejemplo De Frase
Primera en minusculas: ejEMplo de FRASE
Palabras sin espacios: EjEMplodeFRASE
Longitud: 16
Primera letra: E
"de" esta en la posicion: 8
Palabras individuales:
- EjEMplo
- de
- FRASE
Vuelto a juntar: EjEMplo-de-FRASE
Al reves: ESARF ed olpMEjE
Una frase con caracteres especiales: <hola> &tal
Frase partida:
Ejemplo de una
frase mas
larga, que
vamos a partir
en varias
lineas
Sin espacios iniciales: -de -
Sin espacios finales: - de-
Sin espacios iniciales ni finales: -de-
Es decir...
- Podemos convertir a mayúsculas con "strtoupper" o a minúsculas con "strtolower", convertir a mayúsculas sólo el principio de cada palabra con "ucwords"
- Se puede reemplazar una letra o una subcadena por otra, todas las veces que aparezca, usando "str_replace".
- Para saber la longitud de una cadena, emplearemos "strlen", y corchetes si queremos extraer una letra concreta, o "strpos" para saber si contiene una cierta subcadena.
- Podemos "partir" una cadena en trozos, usando un cierto separador, con "explode". Obtendremos que podríamos recorrer con "for" o "foreach". También podemos dar el paso contrario: crear una cadena a partir de los elementos de un array, con "implode".
- Si el texto contiene caracteres de control, como "", podemos dejarlos tal cual para que se interpreten como un cambio a negrita en una página web, o bien usar "htmlspecialchars" para que se conviertan a texto visible.
- Hay otras muchas manipulaciones de uso poco frecuente, como "strrev" para dar la vuelta a una cadena o "wordwrap" para formatear un párrafo a lo largo de varias líneas, con una anchura máxima.
- "ltrim" elimina los espacios a la izquierda de una cadena (al principio), "rtrim" los de la derecha (el final) y "trim" los de ambos lados.
Ejercicio propuesto 7.1: Crea una página que contenga un formulario con una casilla de texto que pida al usuario su nombre y sus dos apellidos. Cuando introduzca datos, una segunda página le mostrará su primer apellido (con todas las letras en minúscula menos la primera), el segundo apellido (igual) y el nombre (igual). Supondremos que habrá dos apellidos y que cada apellido estará formado por una única palabra, pero que el nombre puede ser compuesto (tener una palabra, dos o más).
7.2. Funciones de fecha y hora
Nuevamente, comencemos por un ejemplo que muestre las posibilidades más habituales:
<html>
<body>
<?php
$fecha = date("d-m-y"); /\* Dia, mes y año con dos cifras \*/
echo "La fecha de hoy es: " . $fecha . "<br />";
$mes[1] = "enero"; $mes[2] = "febrero"; $mes[3] = "marzo";
$mes[4] = "abril"; $mes[5] = "mayo"; $mes[6] = "junio";
$mes[7] = "julio"; $mes[8] = "agosto"; $mes[9] = "septiembre";
$mes[10] = "octubre"; $mes[11] = "noviembre"; $mes[12] = "diciembre";
echo date("j") /\* Dia sin 0 inicial \*/
. " de ". $mes[date("n")] /\* Mes sin 0 inicial \*/
. " de ". date("Y") /\* Año con 4 cifras \*/
. "<br />";
echo "Día de la semana (0 a 6): " . date("w"). "<br />";
$dia[1] = "lunes"; $dia[2] = "martes"; $dia[3] = "miércoles";
$dia[4] = "jueves"; $dia[5] = "viernes"; $dia[6] = "sábado";
$dia[0] = "domingo";
echo "El día de la semana es: " . $dia[date("w")] . "<br />";
echo "o bien: " . date("l") . "<br />";
echo "Día del año (0 a 365): " . date("z"). "<br />";
echo "Hora actual: "
. date("H:i:s"). "<br />"; /\* Hora de 00 a 23, mins y segs de 00 a 59 \*/
?>
</body>
</html>
Que mostraría algo como
La fecha de hoy es: 09-12-13
9 de diciembre de 2013
Día de la semana (0 a 6): 1
El día de la semana es: lunes
o bien: Monday
Día del año (0 a 365): 342
Hora actual: 22:29:36
Donde:
- La fecha: en general se sabe a partir de la función "date". Como parámetro a esta función se le indica entre comillas la información que queremos saber, que puede ser:
- "d" es el número de día, con dos cifras ("j" sería usando sólo una cifra para los días 1-9).
- "m" es el número de mes, don dos cifras (o "n", con una cifra cuando sea posible).
- "y" es el número de año, con dos cifras("Y" sería con 4 cifras).
- "H" es la hora, en formato de 24 horas ("h" sería en formato de 12 horas).
- "i" es el número de minutos, con ceros iniciales.
- "s" son los segundos, con ceros iniciales.
- "w" es el número del día de la semana (empezando en 0, para el domingo).
- Para el nombre del día, podríamos usar "l", pero lo obtendremos en inglés, de modo que en general será preferible tener guardados los nombres de los días en español en un array. La misma idea se podría aplicar a los meses.
Ejercicio propuesto 7.2: Crea una página que contenga un formulario que permita al usuario anotar tareas pendientes. Le deberá pedir la descripción de la tarea, la fecha (y le propondrá la fecha actual) y la hora en que debe ser realizada (y también le propondrá la hora actual).
7.3. Números al azar
Nuevamente, comencemos por un ejemplo que muestre las posibilidades más habituales:
<html>
<body>
<?php
$numAzar1 = rand(); // Cualquier valor (quizá sólo hasta 32767)
$numAzar2 = rand() % 9; // Del 0 al 8
$numAzar3 = rand() % 11 + 5; // Del 5 al 15
$numAzar4 = rand(10,20); // Del 10 al 20
$numAzar5 = mt_rand(); // Cualquier valor (quizá mucho mayor que 32767)
$numAzar6 = mt_rand(20,30); // Del 20 al 30
$numAzar7 = mt_rand(1,999) / 1000; // Del 0,001 al 0,999
echo $numAzar1, " - ", $numAzar2, " - ", $numAzar3, " - ",
$numAzar4, " - ", $numAzar5, " - ", $numAzar6, " - ", $numAzar7;
?>
</body>
</html>
Y se mostraría en pantalla algo como:
7443 - 3 - 10 - 13 - 2052892426 - 24 - 0.995
Y los detalles son:
- rand() devuelve un valor entre 0 y "getrandmax()", un valor que en algunas plataformas (como Windows 32 bits), puede ser 32767.
- La forma "clásica" de obtener un número entre dos valores es hacer el módulo para limitar el rango y luego sumar el valor mínimo
- PHP permite otra forma más compacta: indicar el valor mínimo y el máximo
- mt_rand() es una variante más moderna, que puede generar números mucho más grandes y aun así es muy rápida
- mt_rand() también permite indicar un valor mínimo y uno máximo
- Si queremos obtener un número del 0 al 1, podemos generar un número entero y dividirlo entre su valor máximo
- En versiones antiguas de PHP (antes de la 4.2.0), podría ser necesario indicar una semilla antes de empezar a generar números al azar. Lo razonable es que esa semilla fuera el reloj interno del ordenador, lo que se conseguiría con "srand(time());"
Ejercicio propuesto 7.3: Crea una página que contenga varias frases prefijadas en un array, y muestre una al azar cada vez que se lance.