Hola a tod@s,
Hoy continuamos con nuestro curso que dejamos el miércoles pasado con su quinta entrega, Desarrollo Web con PHP y MySQL (V), donde estuvimos viendo como se trabaja con las cadenas de caracteres (strings) en PHP.
A parte de la teoría, vimos en que se diferenciaba la utilización de las comillas simples y comillas dobles a la hora de definir los valores de las variables de tipo string y unas cuantas funciones muy interesantes que nos permitían dar un formato específico a las cadenas como nl2br(), strtok() o substr().
En el ejemplo que vimos, envío de un formulario, aplicamos las funciones que habíamos visto y pudimos comprobar cómo trabajaba PHP con cadenas de forma práctica.
Hoy continuaremos con el estudio y la utilización de Matrices (o Arrays) en PHP.
¡Ánimo!
Siguiendo con la numeración del curso, continuamos con el capítulo 8.
8. Arrays
Los arrays, matrices o también nombradas listas (nosotros utilizaremos el nombre «array«), son una colección de múltiples valores reunidos en una sola variable. Esto nos será muy útil para crear listas de valores del mismo tipo.
Por ejemplo, si deseamos guardar muchos datos de tipo número, por ejemplo todos los días de un mes, hasta ahora teníamos que crear una variable para cada valor. Pero con los arrays, podemos crear una variable del tipo numérica que contenga, por ejemplo, 100 valores distintos (como una lista de números).
8.1 Crear un array
Para crear un array en PHP, utilizaremos la función array().
1 2 3 4 5 6 |
<?php $lista = array('verdura','carne','fruta'); //índices: 0 1 2 ?> |
Los índices de los arrays comienzan automáticamente por 0 (cero), a menos que se indique lo contrario.
En el ejemplo anterior del array $lista:
- ‘verdura’ -> índex 0
- ‘carne’ -> índex 1
- ‘fruta’ -> índex 2
Si queremos asignar nosotros mismos el valor del índice de cada elemento del array, lo que debemos hacer es poner antes de cada elemento el número del índice que deseamos y seguido del símbolo «=>«:
1 2 3 4 5 6 |
<?php $lista = array(1=>'verdura',2=>'carne',3=>'fruta'); //índices: 1 2 3 ?> |
En este caso el array $lista tendrá estos índices:
- ‘verdura’ -> índex 1
- ‘carne’ -> índex 2
- ‘fruta’ -> índex 3
También podemos escribir así (se lee mejor el código fuente PHP):
1 2 3 4 5 6 7 8 9 10 |
<?php $lista = array( 1=>'verdura', 2=>'carne', 3=>'fruta' ); ?> |
8.2 Agregar elementos a un array
Una vez creado el array, podemos añadirle de forma directa nuevos elementos. Podemos, o no, indicar el índice de la posición del nuevo elemento dentro del array.
Si NO lo hacemos, se continúa con el índice de forma secuencial, teniendo en cuenta su último valor.
1 2 3 4 5 6 7 8 9 10 |
<?php $lista = array('verdura', 'carne', 'fruta'); //índices: 0 1 2 //Nuevo elemento: $lista[] = 'pasta'; // Tendrá el índice 3 $lista[] = 'pescado'; // Tendrá el índice 4 ?> |
Si SÍ le indicamos el índice, simplemente le indicamos el índice entre los corchetes:
1 2 3 4 5 6 7 8 9 10 |
<?php $lista = array('verdura', 'carne', 'fruta'); //índices: 0 1 2 //Nuevo elemento: $lista[5] = 'pasta'; // Tendrá el índice 5 $lista[4] = 'pescado'; // Tendrá el índice 4 ?> |
Los índices no únicamente deben ser números, sino que pueden ser otras cadenas de texto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $lista = array( 'lunes'=>'verdura', 'martes'=>'carne', 'miercoles'=>'fruta' ); //Si deseamos añadir otro elemento con este tipo de índice: $lista['jueves'] = 'pasta'; //ïndice 'jueves' //¿Pero, y si no ponemos nada en el índice? $lista[] = 'pescado'; //ïndice 0, el índice será numérico ?> |
8.3 Imprimir un array
PHP tiene una función print_r() que nos permite visualizar como está almacenada un determinado array.
1 2 3 4 5 6 7 8 9 |
<?php $lista = array('verdura','carne','pescado'); print_r($lista); // Por pantalla: // array(1=>'verdura', 2=>'carne', 3=>'pescado') ?> |
8.4 Acceder a los valores de un array
Para poder extraer el valor de un elemento de un array, lo haremos de la siguiente forma:
$nombre_de_array[índice_a_mostrar]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $listaA = array('verdura','carne','pescado'); echo $listaA[1]; // Por pantalla nos mostrará el valor del elemento de índice 1: // carne $listaB = array('lunes'=>'verdura','martes'=>'carne','miercoles'=>'pescado'); echo $listaB['martes']; // Por pantalla nos mostrará el valor del elemento de índice 'martes': // carne ?> |
8.5 Eliminar un array, o alguno de sus elementos
Para eliminar arrays, utilizaremos la función unset().
Esta función unset(), elimina la variable y libera la memoria utilizada por dicha variable.
Para eliminar un elemento del array
Usaremos esta forma:
unset($variableArray[índice_a_borrar])
1 2 3 4 5 6 7 8 9 |
<?php $listaA = array('verdura','carne','pescado'); unset($listaA[1]); //Borramos 'verdura' $listaB = array('lunes'=>'verdura','martes'=>'carne','miercoles'=>'pescado'); unset($listaB['martes']); //Borramos carne ?> |
Si volviésemos a insertar un elemento que hemos eliminado con unset(), por ejemplo, en el índice 1, éste no lo coloca en ese índice, sino al final del array.
Reiniciar o borrar todos los valores de un array
También podemos borrar todos los elementos de un array, y así, quedar vacía.
Usaremos esta nomenclatura:
$variableArray = array(); //Vacía todo el array
8.6 Combinar arrays
PHP tiene una función que nos permite combinar 2 o más arrays usando array_merge().
Con esta función, PHP nos permite introducir uno de los 2 arrays dentro del otro.
Usaremos esta nomenclatura:
array_merge($array1,$array2); //array2 se inserta dentro del array1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $entre_semana = array('lunes','martes','miercoles','jueves','viernes'); //índices: 0 1 2 3 4 $fin_de_semana = array('sabado','domingo'); //índices: 0 1 $semana_completa = array_merge($entre_semana,$fin_de_semana); //Ahora los valores de $entre_semana serán: $entre_semana = array('lunes','martes','miercoles','jueves','viernes','sabado','domingo'); //índices: 0 1 2 3 4 5 6 ?> |
Pero que pasa, si en el ejemplo anterior el array $fin_de_semana, ¿tuviese cadenas como índices?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php //Si los índices de sabado y domingo fuesen cadenas y no números, también los //colocaria al final del array de $entre_semana. $fin_de_semana = array('seis'=>'sabado','siete'=>'domingo'); //índices: 'seis' 'siete' $semana_completa = array_merge($entre_semana,$fin_de_semana); $entre_semana = array('lunes','martes','miercoles','jueves','viernes','sabado','domingo'); //índices: 0 1 2 3 4 'seis' 'siete' ?> |
¿Y si tanto $entre_semana y $fin_de_semana tuviesen índices de cadenas y tuviesen 2 índices iguales?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $entre_semana = array('uno'=>'lunes','dos'=>'martes','tres'=>'miercoles','cuatro'=>'jueves','cinco'=>'viernes'); $fin_de_semana = array('uno'=>'sabado','dos'=>'domingo'); $semana_completa = array_merge($entre_semana,$fin_de_semana); /* Ahora los valores de $entre_semana serán: $entre_semana = array('uno'=>'sabado','dos'=>'domingo','tres'=>'miercoles','cuatro'=>'jueves','cinco'=>'viernes'); Podemos ver que los índices 'uno' y 'dos' como són iguales, los del array o matriz $entre_semana son sobreescritos por los de $fin_de_semana. Si insertamos un nuevo elemento en el array pero que su índice sea '1', PHP interpreta este índice como el número 1 y no como la cadena '1'. */ ?> |
8.7 Crear arrays multidimensionales
Hasta ahora los arrays que hemos visto son unidimensionales, es decir, de una dimensión.
1 2 3 4 5 |
<?php $array1 = array('patatas','manzanas'); ?> |
Pero con PHP también podemos crear arrays multidimensionales, es decir, arrays que tengan más de una dimensión.
O dicho de otra forma, un array que cada elemento suyo es otro array diferente.
A ver si con este ejemplo se entiende mejor, ya que es un concepto bastante abstracto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $fruta = array('manzanas','naranjas','uvas'); $verdura = array('cebollas','tomates','pimientos'); $comida = array('fruta'=>$fruta,'verdura'=>$verdura); /* Con la variable $comida, estamos creando un array bidimensional (2 dimensiones) donde almacenamos un array con indice 'fruta' (que contiene el array de la variable $fruta) y otro índice 'verdura' (que contiene el array de la variable $verdura). */ ?> |
8.8 Acceder a elementos de arrays multidimensionales
Para acceder a los elementos de un array multidimensional se sigue esta nomenclatura:
$array1[índice1][índice2]
Por ejemplo usando el ejemplo anterior:
1 2 3 4 5 6 7 8 9 10 |
<?php $fruta = array('manzanas','naranjas','uvas'); $verdura = array('cebollas','tomates','pimientos'); $comida = array('fruta'=>$fruta,'verdura'=>$verdura); echo $comida['fruta'][0]; //nos mostrará por pantalla 'manzanas' echo $comida['verdura'][1]; //nos mostrará por pantalla 'tomátes' ?> |
8.9 Ordenar arrays
PHP dispone de una serie de funciones para ordenar arrays:
- sort(): Ordena los valores de las arrays sin mantener sus índices.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $alumnos = array(‘Patricia’,’Juan’,’Marta’,’Alex’,’Gerard’); //índices: 0 1 2 3 4 sort($alumnos); print_r($alumnos); /* Por pantalla: array([0]=>Alex [1]=>Gerard [2]=>Joan [3]=>Marta [4]=>Patricia); Ha ordenado por la primera letra de cada palabra y no guarda su índice. */ ?> |
- rsort(): Hace lo mismo que sort(), pero ordena de forma inversa (rsort -> reverse sort).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $alumnos = array(‘Patricia’,’Juan’,’Marta’,’Alex’,’Gerard’); //índices: 0 1 2 3 4 rsort($alumnos); print_r($alumnos); /* Por pantalla: array([0]=>Patricia [1]=>Marta [2]=>Juan [3]=>Gerard [4]=>Alex); Ha ordenado por la primera letra de cada palabra de forma inversa y no guarda su índice. */ ?> |
- asort(): Ordena los valores del array pero mantiene la relación índice=valor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $alumnos = array(‘Patricia’,’Juan’,’Marta’,’Alex’,’Gerard’); //índices: 0 1 2 3 4 asort($alumnos); print_r($alumnos); /* Por pantalla: array([3]=>Alex [4]=>Gerard [1]=>Juan [2]=>Marta [0]=>Patricia); Ha ordenado por la primera letra de cada palabra y guarda el índice que tenía cada elemento. */ ?> |
- arsort(): Hace lo mismo que asort() pero de forma inversa (arsort = asort reverse).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $alumnos = array(‘Patricia’,’Juan’,’Marta’,’Alex’,’Gerard’); //índices: 0 1 2 3 4 arsort($alumnos); print_r($alumnos); /* Por pantalla: array([0]=>Patricia [2]=>Marta [1]=>Juan [4]=>Gerard [3]=>Alex); Ha ordenado por la primera letra de cada palabra de forma inversa y guarda el índice que tenía cada elemento. */ ?> |
- ksort(): Ordena los índices manteniendo la correlación índice=Valor. Es útil cuando los índices son caracteres.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $ciudades = array('h'=>'Hamburgo','e'=>'Estocolmo','a'=>'Alicante'); ksort($ciudades); print_r($ciudades); /* Por pantalla: array([a]=>Alicante [e]=>Estocolmo [h]=>Hamburgo); Ha ordenado por la primera letra de cada índice y guarda su índice. */ ?> |
- krsort(): Ordena de la misma forma que ksort() pero de forma inversa (krsort=ksort reverse).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $ciudades = array('h'=>'Hamburgo','e'=>'Estocolmo','a'=>'Alicante'); krsort($ciudades); print_r($ciudades); /* Por pantalla: array([h]=>Hamburgo [e]=>Estocolmo [a]=>Alicante); Ha ordenado por la primera letra de cada índice de forma inversa y guardando su índice. */ ?> |
8.10 Tranformaciones entre cadenas y arrays
PHP tiene unas funciones específicas que hacen el trabajo de convertir cadenas de caracteres a arrays i a la inversa.
Las funciones son:
- implode(): Convierte un array en una cadena.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $datos = array('imagen','email','telefono'); $cadena = implode(',',$datos); //La coma ',' es el separador que se mostrará en la cadena echo $cadena; /* Por pantalla: imatge,email,telefon */ ?> |
- explode(): Convierte una cadena a un array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $valores = "lunes-martes-miercoles"; //Esta es la cadena $array = explode('-',$valores); /* El guión medio '-' es el separador que separa los elementos en la cadena y los introduce separados en el array. */ print_r($array); /* Por pantalla: Array([0]=>lunes [1]=>martes [2]=>miercoles) */ ?> |
8.11 Validar formularios con selección múltiple
Cuando tenemos un formulario HTML y un campo SELECT de selección múltiple, podemos capturar los datos que hemos seleccionado en HTML y mostrarlos en PHP como si fuesen arrays.
HTML
1 2 3 4 5 6 7 |
<SELECT NAME="bebidas[]" SIZE="3" MULTIPLE> <OPTION VALUE="Agua">Agua</OPTION> <OPTION VALUE="Cerveza">Cerveza</OPTION> <OPTION VALUE="Coca-Cola">Coca-Cola</OPTION> </SELECT> |
PHP
1 2 3 4 5 6 |
$bebidas = $_POST['bebidas']; //$bebidas será un array con las bebidas de la página HTML echo $bebidas[0]."</br>"; //Agua echo $bebidas[1]."</br>"; //Cerveza echo $bebidas[2]."</br>"; //Coca-Cola |
8.12 Contar elementos de un array
PHP tiene una función que retorna el número de valores (elementos) que tenemos en un array.
Esta función es count().
Siguiendo con el ejemplo anterior:
1 2 3 4 5 6 |
$num_bebidas = count($bebidas); /* Nos retornará un 3, que es la cantidad de bebidas que tenemos en nuestro array. */ |
8.13 Ejemplo de envío de formulario
Ahora vamos a realizar un ejemplo bastante parecido al de la anterior entrega. Pero ahora añadiendo mejoras en el código y aplicando las funciones aprendidas en este capítulo del curso sobre arrays.
envia_prueba_funciones.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<HTML> <HEAD> <TITLE>Formulario</TITLE> </HEAD> <BODY> <FORM ACTION="procesa_prueba_funciones.php" METHOD="GET"> <h2>Completa este formulario</h2> <STRONG>Nombre:</STRONG>(Escribir con formato <STRONG>Apellidos, Nombre</STRONG>)<br/> <SELECT NAME="tratamiento" SIZE="1"> <OPTION VALUE="Sr">Sr.</OPTION> <OPTION VALUE="Sra">Sra.</OPTION> </SELECT> <INPUT TYPE="text" MAXLENGTH="30" SIZE="30" NAME="nombre"><br/><br/> <strong>E-Mail:</strong> <INPUT TYPE="text" MAXLENGTH="30" SIZE="30" NAME="email"><br/><br/> <strong>Colores:</strong>(Para seleccionar + de 1 color pulsa tecla <STRONG>Ctrl</STRONG> mientras seleccionas)<br/><br/> <SELECT NAME="colores[]" SIZE="3" MULTIPLE> <OPTION VALUE="Verde">Verde</OPTION> <OPTION VALUE="Azul">Azul</OPTION> <OPTION VALUE="Rojo">Rojo</OPTION> </SELECT> <br/><br/> <strong>Observaciones:</strong><br/> <TEXTAREA NAME="observaciones" ROWS="10" COLS="45">Escribe.Alguna cosa...</TEXTAREA><br/> <INPUT TYPE="submit" NAME="enviar" VALUE="Enviar"> </FORM> </BODY> </HTML> |
procesa_prueba_funciones.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<HTML> <HEAD> <TITLE>Procesado de datos del formulario HTML</TITLE> </HEAD> <BODY> <?php $tratamiento=$_GET['tratamiento']; $nombre=$_GET['nombre']; $email=$_GET['email']; $colores=$_GET['colores']; //Esta variable es el array de colores seleccionados $observaciones=$_GET['observaciones']; $apellidos=strtok($nombre,','); //Solo me capturará el apellido $nombre_solo=strtok(''); //Solo me captura el nombre echo "Grácias <STRONG>$tratamiento $nombre_solo $apellidos</STRONG> por rellenar el formulario!</br>"; $datos_email=explode('@',$email); //datos_email[0]=caracteres antes de la @, datos_email[1]=caracteres después de la @ $usuario=$datos_email[0]; //nombre de la dirección de correo antes de la @ $aux=$datos_email[1]; //variable auxiliar para conseguir el dominio del correo $servidor=strtok($aux,'.'); //captura el servidor de la cuenta antes del . $dominio=strtok(''); //com, es,... o como acabe! echo "El usuario es <STRONG>$usuario</STRONG>"."</br>"; echo "El servidor de correo es <STRONG>$servidor</STRONG>.</br>"; echo "El dominio del correo es <STRONG>$dominio</STRONG>.</br>"; $cadena_colores=implode(',',$colores); echo "Los colores seleccionados han sido: <STRONG>$cadena_colores</STRONG>.</br>"; $posicion=strpos($observaciones,'.'); //Nos indica la posición del punto '.' echo "Las observaciones, después del primer punto han sido: "."<STRONG>".substr($observaciones, $posicion + 1)."</STRONG>"; //Mostrará todo lo que hay en Observaciones después de encontrar el 1º punto. //El +1 es para que no muestre el punto '.' ?> </BODY> </HTML> |
Hasta aquí esta parte del curso Desarrollo Web con PHP y MySQL. La semana próxima iremos incrementando todavía más la complejidad de nuestro código PHP con el estudio y trabajo de Estructuras de control de flujo (tipos, definición, uso) e iremos viendo de forma progresiva todas y cada una de estas estructuras y algunas funciones nuevas para validar más datos en formularios HTML.
Hasta entonces un saludo a tod@s y no os olvidéis dejar vuestros comentarios o incidencias sobre el curso.
¡Ánimo!
Info | PHP.NET
Curso | Desarrollo Web con PHP y MySQL
Últimos comentarios