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.
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 conforeach.var_dump($mixed): muestra el contenido del elemento recibido. Muestra más información queprint_r.$elem = array_pop($array): elimina el último$elementoarray_push($array, $elem): añade un$elementoal final$booleano = in_array($elem, $array): averigua si$elemestá en el$array
<?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);
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$arrayasociativo$tam = count($array): devuelve el tamaño de$arraysort($array): ordena los elementos del$arrayisset($array[elemento]): indica si existe/tiene valor elemento dentro del arrayunset($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);
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
$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
)
Existen muchísimas más funciones para trabajar con arrays. Puedes consultar roda la información en la documentación oficial.
- Un artículo muy completo (en inglés) de Cómo trabajar con arrays en PHP de la manera correcta.
- Otro artículo recomendable (en inglés) es Cómo ordenar arrays en PHP.
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.