Saltar a contenido

Arrays

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

Cuidado con mezclar tipos

Debido al tipado dinámico, los arrays pueden contener datos de diferentes tipos. No se recomienda mezclar tipos dentro de un mismo array.

Los array en PHP se definen mediante corchetes, son 0-index (la numeración empieza en 0), y es posible asignar un valor a una posición específica:

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

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

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

// Accedemos al primer elemento usando la notación de corchetes y mostramos su valor
echo $frutas[0]; // Imprime "Manzana"
print $frutas[1]; // Imprime "Banana"

Es posible obtener el tamaño de un array utilizando la función count(array). Para recorrer el array haremos uso de un bucle for:

ejemplofor.php
<?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 array, incluso más elegante, es hacer uso de foreach. Su sintaxis es foreach (array as elemento):

Recordando conceptos

En el módulo profesional de Programación ya se introdujo este concepto. Recuerda que foreach es una estructura de control que permite recorrer de manera sencilla cada elemento de un array o de un objeto. Por cada iteración, foreach toma un elemento del array y lo asigna a una variable temporal, facilitando el trabajo con cada valor sin necesidad de manejar índices.

ejemploforeach.php
<?php
// Mediante foreach no necesitamos saber el tamaño del array
$colores = ["Rojo", "Verde", "Azul"];

foreach ($colores as $color) {
    echo $color . "<br>"; // Imprime cada color en una nueva línea
}

Arrays asociativos

En los arrays asociativos, cada elemento es un par clave-valor. En lugar de acceder a los elementos por su posición, se accede a ellos mediante una clave. Para recorrer este tipo de arrays, se puede usar foreach separando cada elemento en una pareja clave => valor:

ejemploarrayasociativo.php
<?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 comunes 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.
  • array_pop($array): elimina y devuelve el último elemento del array.
  • array_push($array, $elem): añade un elemento al final del array.
  • in_array($elem, $array): verifica si un elemento está presente en el array.
ejemploarray.php
<?php
$frutas = ["naranja", "pera", "manzana"];

var_dump($frutas);

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);
array(3) {
    [0]=>
    string(7) "naranja"
    [1]=>
    string(4) "pera"
    [2]=>
    string(7) "manzana"
}

Array
(
  [0] => naranja
  [1] => pera
  [2] => manzana
  [3] => piña
)
<p>No queda piña</p>
Array
(
  [0] => naranja
  [1] => pera
  [2] => manzana
)

Otras funciones útiles son:

  • array_keys($array): devuelve las claves de un array asociativo.
  • count($array): devuelve el tamaño del array.
  • sort($array): ordena los elementos de un array.
  • isset($array[elemento]): verifica si un elemento existe en el array.
  • unset($array[elemento]): elimina un elemento del array.
ejemploarrayfunciones.php
<?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);
Array
(
  [0] => Italia
  [1] => Francia
  [2] => Portugal
)
Array
(
  [0] => Francia
  [1] => Italia
  [2] => Portugal
)
Array
(
  [Italia] => Roma
  [Portugal] => Lisboa
)

Cuando se asigna un array a otro, se realiza una copia. Esto puede consumir muchos recursos en arrays grandes.

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

Para más información, se recomienda consultar la documentación oficial.

Arrays bidimensionales

Un array bidimensional es un array de arrays, ya sean secuenciales o asociativos. También pueden existir arrays de más de dos dimensiones.

ejemploarraysbidimensionales.php
<?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'];

Es posible combinar arrays asociativos y secuenciales para almacenar información de manera estructurada, como si fuera una tabla:

ejemplocombinacionarrays.php
<?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 es posible crear estas estructuras complejas con arrays, es recomendable usar objetos en conjunto con arrays para modelar mejor los problemas. Es por ello que estudiaremos cómo crear y utilizar objetos en la unidad siguiente

Actividades

  • 📝 AC 210. (RA3 / CE3a CE3b CE3c / IC1 / 3p) Implementar un programa que llene un array con 50 números aleatorios comprendidos entre 0 y 99, y los muestre en una lista desordenada. Para generar un número aleatorio, utilizar la función rand(inicio, fin).

  • 🔬 AP 211. (RA3 / CE3a CE3b CE3c / IC1 / 3p) Desarrollar una aplicación para la oficina de Docentes Asociados S.A. que simule las famosas galletas chinas. El programa mostrará una frase motivacional aleatoria entre un conjunto predefinido de opciones almacenadas en un array cada vez que se recargue la página.

  • 🔬 AP 212. (RA3 / CE3a CE3b CE3c / IC1 / 3p) Se solicita incrementar la complejidad del ejercicio AC 204. Ahora debe implementarse utilizando arrays y un bucle, y almacenar los resultados en un array asociativo. Mostrar los resultados en una lista desordenada, únicamente con las cantidades que tengan algún valor.

  • ⚓ AR 213. (RA3 / CE3a CE3b CE3c CE3g / IC1 / 3p) Implementar un programa que rellene un array bidimensional de 6 filas por 9 columnas con números aleatorios comprendidos entre 100 y 999, sin repetir ningún número. Mostrar el contenido del array de la siguiente en una tabla donde:

    • La columna del máximo debe aparecer en azul.
    • La fila del mínimo debe aparecer en verde
    • El resto de números deben aparecer en negro.