Tabla de contenido
En el post de esta noche voy a dejar aquí algunos pequeños ejemplos que he ido recopilando por la red acerca de los arrays en PHP. Seguramente no serán los mejores ejemplos ni será la mejor manera de explicarlo, pero yo creo que es fácilmente entendible. Con estos pequeños apuntes, espero tener cubiertas las necesidades básicas de aprendizaje sobre los arrays. Para empezar, creo que sería bueno empezar por una pequeña explicación de que son.
Los arrays son variables complejas. Un array almacena un grupo de valores bajo un único nombre de variable. PHP nos provee de las herramientas necesarias para manejar, acceder y modificar la información almacenada en un array.
Creación de arrays
Hay varias formas de crear un array en PHP. La más simple es asignar un valor a una variable con corchetes ([ ]) al final de su nombre. Por ejemplo, vamos a guardar las tres notas de un alumno:
$notas[1] = 9; $notas[2] = 8; $notas[3] = 10;
Los código anterior crea un array que almacenan 3 valores. Es importante señalar que suponemos que no hemos hecho referencia anteriormente en nuestro programa a la variable $notas.
Un array se puede considerar como una lista de parejas de claves y valores. Para obtener un valor en particular, basta con especificar la clave entre corchetes. En el array anterior, las claves son números: 1, 2 y 3. Sin embargo, podemos usar también palabras como claves (arrays asociativos). Por ejemplo, los enunciados siguientes crean un array de capitales de comunidades autonómicas:
$capitales[‘CAT’] = “Barcelona”; $capitales[‘AND’] = “Sevilla”; $capitales[‘ARA’] = “Zaragoza”;
No es necesario que siempre que creemos un array asignemos claves a los valores. Podemos crear el array anterior de notas de la siguiente forma:
$notas[] = 9; $notas[] = 8; $notas[] = 10;
Cuando creamos el array de esta forma, a los valores se les asigna automáticamente claves que son números de serie, empezando desde el número 0. Así pues, para mostrar el primer valor del array escribiríamos:
echo $notas[0];
Otra forma de crear un array es la siguiente:
$notas = array(9, 8, 10);
De esta forma creamos el mismo array que en el ejemplo anterior, asignando números como claves, empezando por el 0. Podemos crear de forma parecida un array que tenga palabras como claves, por ejemplo:
$capitales = array(“CAT” => “Barcelona”, “AND” => “Sevilla”, “ARA” => “Zaragoza”);
Acceder a los valores de un array
Para visualizar los valores que almacena un array podemos utilizar la función echo, especificando entre corchetes la clave del valor que queremos mostrar:
echo $capitales[‘AND’];
Para ver la estructura y los valores de un array usamos la función print_r. Su uso es el siguiente:
print_r($capitales);
Este código dará la siguiente salida, mostrando la clave y los valores para cada elemento del array:
array ([CAT] => Barcelona [AND] => Sevilla [ARA] => Zaragoza)
También podemos guardar en una variable un valor del array:
$capitalCAT = $capitales[‘CAT’];
Si en la operación anterior intentamos acceder a una posición del array que no existe, obtendremos una advertencia. Por ejemplo:
$capitalCAT = $capitales[‘CA’]; Notice: Undefined index: CA in…
Hay una forma de obtener los valores de un array y almacenarlos automáticamente en diferente
s variables. Se hace mediante la función list, que recibe como parámetros las variables en las que queremos guardar los valores del array. A continuación se muestra un fragmento de código, en el que se declara un array con tres valores. Luego, mediante la función list, se guardan los dos primeros valores del array en dos variables, $var1 y $var2:
$miArray = array(“valor1”, “valor2”, “valor3”); list($var1, $var2); echo $var1, “<br>”; echo $var2, “<br>”;
El primer echo que se hace, mostrará valor1 (seguido de un salto de línea), y el segundo echo mostrará valor2. Si quisiéramos obtener el también el tercer valor del array, basta con incluir una tercera variable como parámetro de la función list.
Por tanto, lo que hemos hecho en el fragmento de código anterior, es equivalente a:
$var1 = $miArray[0]; $var2 = $miArray[1];
Otra manera de obtener los valores de un array en diferentes variables es usando la función extract. Cada valor se copia en una variable con un nombre que se conrresponde con la clave. Por ejemplo, si usamos el array de capitales, podemos hacer:
extract($capitales); echo “Las capitales son “.$CAT.” “.$AND.” “.$ARA;
Nótese que se crean tres variables con los mismos nombres que las claves de los tres valores que guarda el array. Además, en el echo hemos utilizado el operador punto para concatenar diversas cadenas de caracteres.
Quitar valores a un array
Supongamos que tenemos el siguiente array que guarda nombres de personas:
$personas = array (“Pedrete”, “Reginaldo”, “Gandulfo”, “Teustenio”, “Atadulfa”);
El array $personas tiene 5 valores. Si decidimos que queremos eliminar el último valor, parece obvio hacer lo siguiente:
$personas[4] = “”;
El enunciado anterior es incorrecto. Si bien estamos estableciendo una cadena vacía como valor de la quinta posición del array, seguiremos teniendo un array con cinco valores. Para elimina completamente un elemento del array, necesitamos destruirlo de la siguiente forma:
unset ($personas[4]);
Ahora nuestro array sólo cuenta con cuatro valores.
Recorrer un array
Como hemos visto los arrays permiten guardar varios valores bajo un mismo nombre de variable. La mayoría de veces vamos a querer hacer operaciones sobre cada uno de estos valores, como por ejemplo, guardarlos en una base de datos. Así pues, la operación más común con un array es la de iterar, es decir recorrer todos los valores del array y hacer algo con ellos.
Para iterar con cada valor de un array se suele usar la instrucción foreach. Esta nos permite movernos automáticamente por el array, desde el inicio hasta el final, de valor en valor, ejecutando para cada uno un bloque de instrucciones.
La sintaxis de la instrucción foreach es la siguiente:
foreach ($nombreArray as $nombrevalor) { bloque de instrucciones; }
Lo que hace este fragmento de código es recorrer el array $nombreArray, y en cada iteración guarda el valor del elemento actual en la variable $nombrevalor. Con este valor ejecuta el bloque de instrucciones, y cuando termina pasa al siguiente valor del array, hasta que no hay más.
Por ejemplo, vamos a hacer la media de los elementos de un array:
$miArray = array (1, 2, 3, 4); $suma = 0; foreach ($miArray as $valor){ $suma = $suma + $valor; } $media = $suma / 4;
Con la instrucción foreach también podemos obtener la clave de cada posición del array, de la siguiente forma:
foreach ($nombreArray as $nombreclave => $nombrevalor) { bloque de instrucciones; }
Si queremos modificar directamente los elementos del array dentro del bucle foreach, tenemos que poner el carácter & antes de $valor.
Por ejemplo, vamos a multiplicar por 2 todos los valores del array:
$miArray = array (1, 2, 3, 4); foreach ($miArray as &$valor){ $valor = $valor * 2; }
Ahora los valores del vector anterior serán 2, 4, 6, 8. Sin poner el carácter &, los valores seguirían siendo los mismos que antes de ejecutar el bloque foreach.
PHP ofrece otra forma de movernos por un array, sin tener que utilizar la instrucción foreach. Esto se consigue con el uso de punteros, que señalaran a un elemento del array, y podremos mover a nuestro antojo. Para realizar los movimientos tenemos las siguientes funciones:
Función | Descripción |
current ($nombreArray) | Se refiere al valor que está señalando el puntero. Devuelve FALSE si no hay valor. |
next ($nombreArray) | Mueve el puntero hasta el valor que está después del valor actual. Devuelve FALSE si no hay valor. |
previous ($nombreArray) | Mueve el puntero hasta el valor que está antes de la ubicación actual del puntero. Devuelve FALSE si no hay valor. |
end ($nombreArray) | Mueve el puntero hasta el último valor en el array. Devuelve FALSE si el array está vacío. |
reset ($nombreArray) | Mueve el puntero hasta el primer valor en el array. Devuelve FALSE si el array está vacío. |
La primera vez que usemos la función current con un array, nos devolverá el primer valor.
Por ejemplo, vamos a mostrar las tres capitales de nuestro array $capitales:
$valor = current($capitales); echo $valor.”<br>”; $valor = next($capitales); echo $valor.”<br>”; $valor = next($capitales); echo $valor.”<br>”;
Podemos ver que usando estas funciones ganamos flexibilidad en cuanto a los movimientos que podemos hacer sobre los valores de un array. Pero si vamos a acabar recorriéndolos todos, lo mejor es utilizar un bloque foreach o un blucle for o while.
Ordenar un array
PHP nos ofrece diversas funciones para ordenar los valores de un array. Las más comunes son sort y asort.
La función sort se utiliza para ordenar los valores de un array que tiene números como claves. La sintaxis es la siguiente:
$notas = array(9, 8, 10); sort ($notas); echo $notas[0]; echo $notas[1]; echo $notas[2];
Este código producirá el output 8, 9 y 10, mostrando los valores del array ordenados. La función sort funcionaría igualmente con un array que guardara cadenas de caracteres. Recordemos que las cadenas se ordenan teniendo en cuenta el código ASCII de cada carácter.
Si usamos la función sort para ordenar un array con palabras como claves, las claves cambiarán a números, y las palabras claves se perderán.
Para ordenar arrays que tengan palabras como claves, usaremos la función asort como sigue:
asort ($capitales);
Este enunciado clasifica las capitales por valores, y retiene la clave original para cada valor en lugar de asignar una clave numérica. Por ejemplo, si suponemos que inicialmente el array $capitales tiene esta información:
$capitales[‘ARA’] = “Zaragoza”; $capitales[‘CAT’] = “Barcelona”; $capitales[‘AND’] = “Sevilla”;
Después de ejecutar la función asort($capitales), el array quedará así:
$capitales[‘CAT’] = “Barcelona”; $capitales[‘AND’] = “Sevilla”; $capitales[‘ARA’] = “Zaragoza”;
Hay otras funciones de ordenación:
Función | Descripción |
rsort ($array) | Ordena según valor en orden inverso. Asigna números nuevos como claves. |
arsort ($array) | Ordena según valor en orden inverso. Mantiene la misma clave. |
ksort ($array) | Ordena según clave. |
krsort ($array) | Ordena según clave en orden inverso. |
usort ($array, función) | Ordena según función. |
Arrays multidimensionales
Los arrays multidimensionales pueden entenderse como un array que en cada posición guarda un array. Podríamos pensar en una matriz para situar los valores del array multidimensional. Cada valor se identifica por dos claves, filas y columna.
Veamos un ejemplo, en que queremos guardar las notas de una clase. Cada nota corresponde a un alumno concreto y a una asignatura concreta. Por tanto vamos a utilizar dos claves, el nombre del alumno y el nombre de la asignatura, para referenciar una nota:
$notas [‘Carlos’][‘Mates’] = 8; $notas [‘Carlos’][‘Lengua’] = 10; $notas [‘Inés’][‘Mates’] = 6; $notas [‘Inés’][‘Lengua’] = 5; $notas [‘José’][‘Mates’] = 7; $notas [‘José’][‘Lengua’] = 4;
En el ejemplo anterior podemos ver la estructura de $notas como un array de arrays. $notas tiene claves Carlos, Inés y José. El valor para cada clave es un array con dos claves, Mates y Lengua.
$notas es un array bidimensional. El título de este apartado sugiere que en PHP se pueden construir arrays de tres, cuatro, cinco o más dimensiones.
El array bidimensional anterior también podemos declararlo como sigue:
$notas = array ( ‘Carlos’ => array (‘Mates’ => 8, ‘Lengua’ => 10), ‘Inés’ => array (‘Mates’ => 6, ‘Lengua’ => 5), ‘José’ => array (‘Mates’ => 7, ‘Lengua’ => 4) );
Podemos obtener el valor de un array bidimensional de la siguiente forma:
$nota = $notas[‘Inés’][‘Lengua’];
Por supuesto, podremos recorrer el array bidimensional usando construcciones foreach. Necesitaremos un bloque foreach para cada array. Un enunciado forecha está dentro de otro enunciado foreach. Dicho de una forma más correcta, utilizaremos dos foreach anidados.
En el siguiente ejemplo, vamos a construir una tabla html que contenga las notas de cada alumno:
echo “<table border=1>”; foreach ($notas as $nombreAlumno => $notasAlumno){ echo “<tr><td>”.$nombreAlumno.”</td>” foreach ($notasAlumno as $nombreModulo => $nota){ echo “<td>”.$nombreModulo.”: ”.$nota.”</td>”; } echo “</tr>”; } echo “</table>”;
Antes del primer foreach construimos la tabla con la etiqueta table de HTML. Como es un output que queremos que interprete el navegador, usamos el enunciado echo.
El primer foreach nos sirve para recorrer los alumnos de nuestro array bidimensional. Guardamos el nombre de cada alumno en la variable $nombreAlumno y su array de notas en la variable $notasAlumno. Para cada alumno creamos una nueva fila de la tabla, etiqueta tr, y una columna donde pondremos su nombre, con la etiqueta td. Además, recorremos el array $notasAlumno, guardando el nombre de la asignatura en la variable $nombreModulo y la nota en la variable $nota. Construimos con estos dos valores una nueva columna de nuestra table.
Una vez vistas todas las notas de un alumno, cerramos una fila de la tabla, y volvemos a iterar con los siguientes alumnos y notas.