Saltar al contenido principal

Arrays

Para almacenar datos compuestos, podemos utilizar tanto arrays sencillos como arrays asociativos (similares a un mapa). En realidad todos los arrays son mapas ordenados compuestos de pares clave-valor.

Cuidado con mezclar tipos de datos

Como el tipado es dinámico, nuestros arrays pueden contenedor datos de diferentes tipos. No se recomienda mezclar los tipos.

Del mismo modo que Java, se definen mediante corchetes, son 0-index, y se puede asignar un valor a un posición determinada:

<?php
$frutas = array("naranja", "pera", "manzana");

$frutas2 = ["naranja", "pera", "manzana"];

$frutas3 = [];
$frutas3[0] = "naranja";
$frutas3[1] = "pera";
$frutas3[] = "manzana"; // lo añade al final

Podemos obtener el tamaño del array mediante la función count(array). Para recorrer el array haremos uso de un bucle for:

<?php
$tam = count($frutas); // tamaño del array

for ($i=0; $i<count($frutas); $i++) {
echo "Elemento $i: $frutas[$i] <br />";
}

Otra forma de recorrer los arrays, incluso más elegante, es hacer uso de foreach. Su sintaxis es foreach (array as elemento):

<?php
// Mediante foreach no necesitamos saber el tamaño del array
foreach ($frutas as $fruta) {
echo "$fruta <br />";
}

Arrays asociativos

Cada elemento es un par clave-valor. En vez de acceder por la posición, lo hacemos mediante una clave. Así pues, para cada clave se almacena un valor.

A la hora de recorrer este tipo de arrays, mediante foreach separamos cada elemento en una pareja clave => valor:

<?php
$capitales = ["Italia" => "Roma",
"Francia" => "Paris",
"Portugal" => "Lisboa"];
$capitalFrancia = $capitales["Francia"]; // se accede al elemento por la clave, no la posición

$capitales["Alemania"] = "Berlín"; // añadimos un elemento

echo "La capital de Francia es $capitalFrancia <br />";
echo "La capital de Francia es {$capitales["Francia"]} <br />";

$capitales[] = "Madrid"; // se añade con la clave 0 !!! ¡¡¡No asignar valores sin clave!!!

foreach ($capitales as $valor) { // si recorremos un array asociativo, mostraremos los valores
echo "$valor <br />";
}

foreach ($capitales as $pais => $ciudad) { // separamos cada elemento en clave => valor
echo "$pais : $ciudad <br />";
}

Operaciones

Las operaciones más importantes que podemos realizar con arrays son:

  • print_r($array): muestra el contenido de todo el $array. Si queremos mostrar el contenido con un formato determinado, hemos de recorrer el array con foreach.
  • var_dump($mixed): muestra el contenido del elemento recibido. Muestra más información que print_r.
  • $elem = array_pop($array): elimina el último $elemento
  • array_push($array, $elem): añade un $elemento al final
  • $booleano = in_array($elem, $array): averigua si $elem está en el $array
PHP
<?php
$frutas = ["naranja", "pera", "manzana"];

array_push($frutas, "piña");
print_r($frutas);

$ultFruta = array_pop($frutas);
if (in_array("piña", $frutas)) {
echo "<p>Queda piña</p>";
} else {
echo "<p>No queda piña</p>";
}
print_r($frutas);
Consola
Array
(
[0] => naranja
[1] => pera
[2] => manzana
[3] => piña
)
<p>No queda piña</p>
Array
(
[0] => naranja
[1] => pera
[2] => manzana
)
  • $claves = array_keys($array): devuelve las claves del $array asociativo
  • $tam = count($array): devuelve el tamaño de $array
  • sort($array): ordena los elementos del $array
  • isset($array[elemento]): indica si existe/tiene valor elemento dentro del array
  • unset($array[elemento]): elimina el elemento del array (deja un hueco)
<?php
$capitales = array("Italia" => "Roma",
"Francia" => "Paris",
"Portugal" => "Lisboa");

$paises = array_keys($capitales);
print_r($paises);
sort($paises);
print_r($paises);

unset($capitales["Francia"]);
print_r($capitales);
Consola
Array
(
[0] => Italia
[1] => Francia
[2] => Portugal
)
Array
(
[0] => Francia
[1] => Italia
[2] => Portugal
)
Array
(
[Italia] => Roma
[Portugal] => Lisboa
)

Al asignar un array a otro se realiza una copia. Cuidado con esta operación que puede consumir muchos recursos.

PHP
<?php
$nombres = ["Juan", "Ana", "Pedro", "Laura"];
$copia = $nombres;
sort($nombres);
print_r($nombres);
print_r($copia);
Consola
Array
(
[0] => Ana
[1] => Juan
[2] => Laura
[3] => Pedro
)
Array
(
[0] => Juan
[1] => Ana
[2] => Pedro
[3] => Laura
)

Existen muchísimas más funciones para trabajar con arrays. Puedes consultar roda la información en la documentación oficial.

Artículos para profundizar en las operaciones con arrays

Arrays bidimensionales

Consiste en un array de arrays, ya sean arrays secuenciales o asociativos. Puede haber N dimensiones.

<?php
$persona["nombre"] = "Bruce Wayne";
$persona["telefonos"] = ["966 123 456", "636 636 636"]; // array de arrays ordinarios
$persona["profesion"] = ["dia" => "filántropo", "noche" => "caballero oscuro"]; // array de arrays asociativos

echo $persona['nombre']." por la noche trabaja de ".$persona['profesion']['noche'];

Combinando los arrays asociativos en varias dimensiones podemos almacenar la información como si fuera una tabla:

<?php
$menu1 = ["Plato1" => "Macarrones con queso", "Plato2" => "Pescado asado", "Bebida" => "Coca-Cola", "Postre" => "Helado de vainilla"];
$menu2 = ["Plato1" => "Sopa", "Plato2" => "Lomo con patatas", "Bebida" => "Agua", "Postre" => "Arroz con leche"];
$menus = [$menu1, $menu2]; // creamos un array a partir de arrays asociativos

foreach ($menus as $menudeldia) {
echo "Menú del día<br/>";

foreach ($menudeldia as $platos => $comida) {
echo "$platos: $comida <br/>";
}
}

// Para acceder a un elemento concreto se anidan los corchetes
$postre0 = $menus[0]["Postre"];

Aunque pueda parecer una buena idea crear este tipo de estructuras, es mejor utilizar objetos conjuntamente con arrays (posiblemente arrays de otros objetos) para crear estructuras complejas que permitan modelar mejor los problemas.