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:
<?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
:
<?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.
<?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
:
<?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 elarray
conforeach
.var_dump($mixed)
: muestra el contenido del elemento recibido. Muestra más información queprint_r
.array_pop($array)
: elimina y devuelve el último elemento delarray
.array_push($array, $elem)
: añade un elemento al final delarray
.in_array($elem, $array)
: verifica si un elemento está presente en elarray
.
<?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.
<?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.
<?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.
<?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:
<?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.