Los arrays son variables especiales que permiten almacenar varios valores estructurándolos como si fuesen una tabla, de ahí a que también sean llamados “tablas”.
Un array contiene una lista de valores asociados mediante un índice, que será el identificativo de un valor en concreto.
Este índice puede ser numérico en los arrays escalares, o puede ser una cadena de caracteres en el caso de los arrays asociativos. Veremos ejemplos de cada uno.
Array escalado
$paises
$pais[0] | $pais[1] | $pais[2] | |
Índice -> | 0 | 1 | 2 |
Valor -> | «España» | «Francia» | «Italia» |
Array asociativo
$meses
$meses[«enero»] | $meses[«febrero»] | $meses[«marzo»] | |
Índice -> | «enero» | «febrero» | «marzo» |
Valor -> | 31 | 28 | 31 |
La declaración de un array se hace de la siguiente forma:
<?php
$matriz[0] = "Valor 1";
$matriz[1] = "Valor 2";
$matriz[2] = "Valor 3";
$matriz[3] = "Valor 4";
…;
?>
Vamos a suponer que tenemos una variable llamada $paises, y que a esa variable queremos asignarle varios valores que serían nombres de países.
En lugar de crear una variable para cada país, podríamos usar una única variable contenedora que almacenara todos los países, lo que nos ahorraría tiempo y recursos.
<?php
$paises[0] = "España";
$paises[1] = "Francia";
$paises[2] = "Italia";
$paises[3] = "Alemania";
?>
Si queremos mostrar en pantalla el valor de uno de los elementos del array, deberemos hacer referencia al nombre del array junto a su índice:
echo $paises[2];
Imprimiría en pantalla: Italia.
Los arrays también se comportan como listas.
Pueden ser declarados como una lista de elementos formados por su índice y su valor.
<?php
$nombre = array(‘Valor1’, ‘Valor2’, ‘Valor3’, ‘Valor4’);
?>
Si no especificamos el índice, automáticamente se convertirá en un array escalado, almacenando el primer elemento en el índice 0, y así sucesivamente, de forma que:
- Valor1 se asociará al índice 0.
- Valor2 se asociará al índice 1.
- Valor3 se asociará al índice 2.
- Etc.
Pero también podemos especificar el índice al construir la lista, por ejemplo:
<?php
$nombre = array('dias' => 10,
'color' => 'azul',
'marca' => 'Seat');
?>
La estructura de la lista sería:
Índice | ‘días’ | Índice | ‘color’ | Índice | ‘marca’ |
Valor | 10 | Valor | ‘azul’ | Valor | ‘Seat’ |
Primer elemento | Segundo elemento | Tercer elemento |
Con lo cual esta misma lista se habría podido declarar de la otra forma:
<?php
$nombre['dias'] = 10;
$nombre['color'] = 'azul';
$nombre['marca'] = 'Seat';
?>
Podemos realizarlo de la forma que nos resulte más cómoda:
¿Cómo podemos recorrer o movernos dentro de un array?
El propósito de crear arrays es el de poder agrupar conjuntos de valores que puedan ser manipulados fácilmente, para ello PHP ofrece mecanismos para manipular y movernos dentro de un array.
El bucle foreach
foreach recorre un array como si se tratara de una lista de elementos, empezando por el primero hasta el último.
La declaración se realiza de la siguiente forma:
<?php
foreach ($nombrearray as $indice => $valor){
Recorrido de elementos
}
?>
En la declaración se especifican 3 parámetros:
- El nombre del array.
- El índice.
- El valor correspondiente al elemento.
Es posible que no necesitemos obtener el índice, con lo cual podemos suprimir $indice de la lista de parámetros de foreach, quedando simplemente:
foreach($nombrearray as $valor)
El índice podemos necesitarlo si vamos a manipular el array, como borrar un elemento a partir de su índice, modificarlo, movernos a un elemento en concreto, etc. Pero si lo único que vamos a hacer es mostrar la lista de elementos, no lo necesitamos.
Ejemplo de uso de foreach:
<?php
$semana[0] = "Lunes";
$semana[1] = "Martes";
$semana[2] = "Miércoles";
$semana[3] = "Jueves";
$semana[4] = "Viernes";
$semana[5] = "Sábado";
$semana[6] = "Domingo";
foreach ($semana as $indice => $valor){
echo $indice . " " . $valor . "<br/>";
}
?>
Este ejemplo imprimiría en pantalla:
0 Lunes
1 Martes
2 Miércoles
3 Jueves
4 Viernes
5 Sábado
6 Domingo
Los arrays disponen de un cursor interno que es el encargado de posicionarse sobre cada uno de los elementos.
Este cursor podemos manejarlo con algunas funciones de PHP:
- reset($nombrearray): Coloca el cursor sobre el primer elemento del array.
- next($nombrearray): Mueve el cursor al siguiente elemento. Si no existen más elementos, la función devuelve false.
- prev($nombrearray): Mueve el cursor al elemento anterior. De no haberlo, la función devuelve false.
- end($nombrearray): Coloca el cursor sobre el último elemento del array.
- current($nombrearray): Devuelve el valor del elemento sobre el que está situado el cursor en ese momento. De no existir ningún valor, devolverá false.
- key($nombrearray): Devuelve el índice del elemento sobre el que está situado el cursor en ese momento. Si no existe ningún elemento, devolverá NULL.
Veamos un ejemplo usando las funciones de manejo del cursor de un array.
Haciendo uso del ejemplo anterior con el array $semanas[ ], supongamos que únicamente queremos mostrar los días del Lunes al Jueves.
Si usamos un bucle foreach, los recorrerá todos desde el primero al último, pero haciendo uso de las funciones vistas podemos hacer:
<?php
$semana[0] = "Lunes";
$semana[1] = "Martes";
$semana[2] = "Miércoles";
$semana[3] = "Jueves";
$semana[4] = "Viernes";
$semana[5] = "Sábado";
$semana[6] = "Domingo";
while(key($semana) != 4){
echo $semana[key($semana)] . "<br/>";
next($semana);
?>
Vamos a analizar con detenimiento este bucle while:
La función key() devuelve el índice sobre el que se encuentra el cursor en ese momento. Por tanto la condición de repetición del bucle while es que el cursor no llegue a 4.
En la siguiente instrucción, pedimos que imprima en pantalla el valor actual de $semana[ ] pasándole como índice, el índice actual en el que nos encontramos con key($semana).
La última instrucción next($semana), mueve el cursor hacia el siguiente elemento.
Cuando el índice llega a 4, la condición de repetición del bucle no se cumple, y finaliza.
La traducción literal del bucle sería:
Mientras el índice actual del array semana NO sea igual a 4…
muestra en pantalla el elemento sobre el cual está situado el cursor en este momento.
coloca el cursor en el siguiente elemento del array.
Fin
El resultado en pantalla mostraría:
Lunes
Martes
Miércoles
Jueves
Eliminar elementos de un array
Si necesitamos eliminar alguno de los elementos almacenados en un array, podemos usar la función unset().
Esta función espera que le pasemos como parámetro el nombre del array y el índice del elemento que deseamos borrar, quedando la expresión de la siguiente forma:
<?php
unset($nombrearray[índice]);
?>
Ejemplo:
<?php
unset($semana[2]);
?>
Eliminaría el valor “Miércoles” del array.
Hay que mencionar, que unset() no modifica el orden lógico de los elementos del array, lo que ocurre es, que si eliminamos el elemento nº 2 del array, entonces el tercer elemento ocupará su lugar, el cuarto pasará al tercero y así sucesivamente.
Antes | Después |
0 Lunes 1 Martes 2 Miércoles 3 Jueves 4 Viernes 5 Sábado 6 Domingo | 0 Lunes 1 Martes 2 Jueves 3 Viernes 4 Sábado 5 Domingo |
Obsérvese cómo se han reordenado los índices tras borrar uno de los elementos del array.
Es posible eliminar un array entero si no le pasamos ningún parámetro a la función unset.
unset($semana);
Esta función destruye todo el array, no solo los elementos internos, si no el array en sí.
Si lo que queremos es eliminar únicamente los elementos usaríamos el constructor array() sin pasarle ningún parámetro.
$semana = array();
Extraer un elemento aleatorio de un array
Una función interesante dentro del uso de arrays es la posibilidad de extraer un elemento aleatorio cada vez que se invoque el programa, por ejemplo, cada vez que se actualice el navegador web.
Podemos tener un array con varios nombres de imágenes y que estas sean mostradas de forma aleatoria cada vez que se cargue la página.
Para ello haremos uso de la función array_rand().
Esta función espera como parámetro el nombre del array, y devuelve uno de los índices contenidos al azar.
Veamos un ejemplo:
<?php
$imagenes = array('imagen1.png', 'imagen2.png', 'imagen3.png');
$mostrar = array_rand($imagenes);
echo $imagenes[$mostrar];
?>
El array declarado contiene 3 elementos correspondientes a los nombres de tres imágenes PNG.
Usamos la función array_rand() pasándole como parámetro el nombre del array: array_rand($imagenes), el cogerá uno de los índices del array al azar, y lo almacenamos en una variable llamado $mostrar.
Seguidamente imprimimos en pantalla el resultado, con echo $imagenes[$mostrar], donde $mostrar será el índice escogido aleatoriamente.