Un array es una estructura de datos que permite almacenar múltiples valores bajo un único nombre de variable. En PHP, los arrays son increíblemente versátiles y pueden almacenar cualquier tipo de datos, incluso otros arrays.
Los arrays indexados utilizan números como índices. El primer elemento tiene el índice 0, el segundo tiene el índice 1, y así sucesivamente.
Hay dos formas principales de crear arrays indexados:
<?php
$frutas = ["manzana", "naranja", "plátano"];
foreach ($frutas as $fruta) {
echo $fruta . "<br>";
}
?>
Existen varias formas de recorrer los elementos de un array:
<?php
$frutas = ["manzana", "naranja", "plátano", "fresa"];
// Método 1: Bucle for
echo "Recorriendo con bucle for:<br>";
for ($i = 0; $i < count($frutas); $i++) {
echo "Índice $i: " . $frutas[$i] . "<br>";
}
echo "<br>Recorriendo con foreach:<br>";
// Método 2: Bucle foreach (recomendado)
foreach ($frutas as $fruta) {
echo $fruta . "<br>";
}
echo "<br>Recorriendo con foreach (con índices):<br>";
// Método 3: foreach con índices
foreach ($frutas as $indice => $fruta) {
echo "Índice $indice: $fruta<br>";
}
?>
foreach
es más fácil de leer y menos propenso a errores que el bucle for
.
Puedes modificar, añadir y eliminar elementos de un array:
<?php
$frutas = ["manzana", "naranja", "plátano"];
// Modificar un elemento existente
$frutas[1] = "kiwi"; // Reemplaza "naranja" por "kiwi"
// Añadir un elemento al final
$frutas[] = "fresa"; // Añade "fresa" al final
// Añadir un elemento con la función array_push()
array_push($frutas, "uva"); // Añade "uva" al final
// Eliminar el último elemento
array_pop($frutas); // Elimina "uva"
// Eliminar un elemento específico
unset($frutas[0]); // Elimina "manzana" (¡pero no reordena los índices!)
// Mostrar el array resultante
echo "Array después de las modificaciones:<br>";
print_r($frutas);
?>
unset()
para eliminar un elemento de un array, los índices no se reordenan automáticamente. Si necesitas reordenar los índices, puedes usar array_values($array)
después.
Los arrays asociativos utilizan claves personalizadas en lugar de índices numéricos. Esto permite acceder a los valores de forma más descriptiva.
<?php
// Crear un array asociativo
$persona = [
"nombre" => "Juan",
"edad" => 25,
"ciudad" => "Madrid"
];
// Forma alternativa
$estudiante = array(
"nombre" => "Ana",
"carrera" => "Informática",
"semestre" => 3
);
// Acceder a elementos específicos
echo "$persona[nombre] tiene $persona[edad] años y vive en $persona[ciudad]";
?>
Para recorrer arrays asociativos, el bucle foreach
es la mejor opción:
<?php
$persona = [
"nombre" => "Juan",
"edad" => 25,
"ciudad" => "Madrid",
"profesion" => "Desarrollador"
];
// Recorrer solo los valores
echo "Datos personales:<br>";
foreach ($persona as $valor) {
echo "- $valor<br>";
}
// Recorrer claves y valores
echo "<br>Datos con etiquetas:<br>";
foreach ($persona as $clave => $valor) {
echo ucfirst($clave) . ": $valor<br>";
}
?>
<?php
$persona = [
"nombre" => "Juan",
"edad" => 25,
"ciudad" => "Madrid"
];
// Modificar un valor existente
$persona["edad"] = 26;
// Añadir un nuevo par clave-valor
$persona["profesion"] = "Desarrollador";
// Eliminar un elemento
unset($persona["ciudad"]);
// Mostrar el array resultante
echo "Array modificado:<br>";
print_r($persona);
?>
Los arrays multidimensionales son arrays que contienen otros arrays. Son útiles para representar estructuras de datos complejas como matrices, tablas o jerarquías.
<?php
// Array multidimensional (matriz de estudiantes)
$estudiantes = [
[
"nombre" => "Ana López",
"calificaciones" => [
"matematicas" => 90,
"historia" => 85,
"ciencias" => 92
]
],
[
"nombre" => "Carlos Gómez",
"calificaciones" => [
"matematicas" => 78,
"historia" => 89,
"ciencias" => 76
]
]
];
// Acceder a los datos de un estudiante
$estudiante1 = $estudiantes[0];
echo "Estudiante: " . $estudiante1["nombre"] . "<br>";
echo "Matemáticas: " . $estudiante1["calificaciones"]["matematicas"] . "<br>";
echo "Historia: " . $estudiante1["calificaciones"]["historia"] . "<br>";
echo "Ciencias: " . $estudiante1["calificaciones"]["ciencias"] . "<br>";
// Forma directa de acceder a los datos
echo "<br>";
echo "Estudiante: " . $estudiantes[1]["nombre"] . "<br>";
echo "Matemáticas: " . $estudiantes[1]["calificaciones"]["matematicas"] . "<br>";
echo "Historia: " . $estudiantes[1]["calificaciones"]["historia"] . "<br>";
echo "Ciencias: " . $estudiantes[1]["calificaciones"]["ciencias"] . "<br>";
?>
Para recorrer arrays multidimensionales, se utilizan bucles foreach
anidados:
<?php
// Array multidimensional
$productos = [
"electronica" => [
"televisores" => ["Samsung", "LG", "Sony"],
"smartphones" => ["iPhone", "Samsung Galaxy", "Xiaomi"]
],
"hogar" => [
"muebles" => ["Sofá", "Mesa", "Silla"],
"electrodomesticos" => ["Nevera", "Lavadora", "Microondas"]
]
];
// Recorrer el array multidimensional
foreach ($productos as $categoria => $subcategorias) {
echo "<strong>Categoría: " . ucfirst($categoria) . "</strong><br>";
foreach ($subcategorias as $subcategoria => $items) {
echo "- " . ucfirst($subcategoria) . ": ";
foreach ($items as $indice => $item) {
echo $item;
// Agregar coma si no es el último elemento
if ($indice < count($items) - 1) {
echo ", ";
}
}
echo "<br>";
}
echo "<br>";
}
?>
PHP proporciona numerosas funciones para manipular y trabajar con arrays:
Función | Descripción | Ejemplo |
---|---|---|
count($array) |
Cuenta el número de elementos | count([1, 2, 3]) // 3 |
sort($array) |
Ordena un array (ascendente) | sort($numeros) |
rsort($array) |
Ordena un array (descendente) | rsort($numeros) |
array_push($array, $valor) |
Añade elementos al final | array_push($frutas, "piña") |
array_pop($array) |
Elimina y devuelve el último elemento | $ultimo = array_pop($frutas) |
array_shift($array) |
Elimina y devuelve el primer elemento | $primero = array_shift($frutas) |
array_unshift($array, $valor) |
Añade elementos al inicio | array_unshift($frutas, "kiwi") |
array_merge($array1, $array2) |
Fusiona dos o más arrays | $fusion = array_merge($a, $b) |
in_array($valor, $array) |
Comprueba si un valor existe | in_array("manzana", $frutas) |
array_search($valor, $array) |
Busca un valor y devuelve su clave | $key = array_search("manzana", $frutas) |
array_key_exists($clave, $array) |
Verifica si una clave existe | array_key_exists("nombre", $persona) |
array_sum($array) |
Suma los valores de un array numérico | $suma = array_sum([1, 2, 3, 4]) |
<?php
// Array original
$frutas = ["manzana", "naranja", "plátano", "fresa", "kiwi"];
echo "Array original: " . implode(", ", $frutas) . "<br><br>";
// Ordenar alfabéticamente
sort($frutas);
echo "Array ordenado: " . implode(", ", $frutas) . "<br>";
// Comprobar si existe un valor
$buscar = "manzana";
if (in_array($buscar, $frutas)) {
echo "¿Existe la $buscar en el array? Sí<br>";
} else {
echo "¿Existe la $buscar en el array? No<br>";
}
// Contar elementos
echo "Conteo de elementos: " . count($frutas) . "<br>";
// Sumar valores numéricos
$numeros = [10, 15, 5, 8, 17];
echo "Suma de números: " . array_sum($numeros) . "<br>";
// Fusionar arrays
$masFrutas = ["uva", "cereza"];
$todasFrutas = array_merge($frutas, $masFrutas);
echo "Todas las frutas: " . implode(", ", $todasFrutas) . "<br>";
// Eliminar duplicados
$numeros_duplicados = [1, 2, 2, 3, 4, 4, 5];
$numeros_unicos = array_unique($numeros_duplicados);
echo "Números únicos: " . implode(", ", $numeros_unicos) . "<br>";
// Obtener claves
$persona = ["nombre" => "Juan", "edad" => 25, "ciudad" => "Madrid"];
$claves = array_keys($persona);
echo "Claves del array persona: " . implode(", ", $claves) . "<br>";
// Obtener valores
$valores = array_values($persona);
echo "Valores del array persona: " . implode(", ", $valores);
?>
PHP ofrece también funciones avanzadas para operaciones más complejas con arrays:
<?php
// Array de números
$numeros = [1, 2, 3, 4, 5];
// array_map(): aplica una función a cada elemento
$cuadrados = array_map(function($n) {
return $n * $n;
}, $numeros);
echo "Números al cuadrado: " . implode(", ", $cuadrados) . "<br>";
// array_filter(): filtra elementos según una condición
$pares = array_filter($numeros, function($n) {
return $n % 2 == 0;
});
echo "Números pares: " . implode(", ", $pares) . "<br>";
// array_reduce(): reduce el array a un solo valor
$suma = array_reduce($numeros, function($carry, $item) {
return $carry + $item;
}, 0);
echo "Suma de números: $suma<br>";
// array_walk(): modifica cada elemento del array
$frutas = ["manzana", "naranja", "plátano"];
array_walk($frutas, function(&$value) {
$value = ucfirst($value);
});
echo "Frutas con mayúscula: " . implode(", ", $frutas) . "<br>";
// array_slice(): extrae una porción del array
$porcion = array_slice($numeros, 1, 3); // desde índice 1, 3 elementos
echo "Porción del array: " . implode(", ", $porcion) . "<br>";
// array_chunk(): divide un array en fragmentos
$grupos = array_chunk($numeros, 2); // grupos de 2 elementos
echo "Array dividido en grupos:<br>";
foreach ($grupos as $grupo) {
echo "- " . implode(", ", $grupo) . "<br>";
}
?>
array_map()
, array_filter()
y array_reduce()
permiten escribir código más conciso y expresivo al trabajar con arrays.
<?php
// Lista de tareas con arrays
$tareas = [
[
"id" => 1,
"titulo" => "Comprar víveres",
"completada" => true,
"fechaLimite" => "2025-05-05"
],
[
"id" => 2,
"titulo" => "Pagar facturas",
"completada" => false,
"fechaLimite" => "2025-05-10"
],
[
"id" => 3,
"titulo" => "Enviar informe",
"completada" => false,
"fechaLimite" => "2025-05-15"
]
];
// Mostrar todas las tareas
echo "<h4>Lista de tareas:</h4>";
echo "<ul>";
foreach ($tareas as $tarea) {
$estado = $tarea["completada"] ? "completada" : "pendiente";
$clase = $tarea["completada"] ? "text-decoration-line-through text-muted" : "";
echo "<li class='$clase'>";
echo $tarea["titulo"] . " - Estado: " . $estado . " (Fecha límite: " . $tarea["fechaLimite"] . ")</li>";
}
echo "</ul>";
// Filtrar tareas pendientes
$tareasPendientes = array_filter($tareas, function($tarea) {
return !$tarea["completada"];
});
echo "<h4>Tareas pendientes:</h4>";
echo "<ul>";
foreach ($tareasPendientes as $tarea) {
echo "<li>" . $tarea["titulo"] . " (Fecha límite: " . $tarea["fechaLimite"] . ")</li>";
}
echo "</ul>";
// Contar tareas completadas
$tareasCompletadas = array_filter($tareas, function($tarea) {
return $tarea["completada"];
});
echo "<p>Tienes " . count($tareasPendientes) . " tareas pendientes y " .
count($tareasCompletadas) . " tareas completadas.</p>";
?>
<?php
// Datos de ventas
$ventas = [
"enero" => 15000,
"febrero" => 22000,
"marzo" => 18500,
"abril" => 25000,
"mayo" => 21000
];
// Total de ventas
$totalVentas = array_sum($ventas);
echo "<h4>Estadísticas de ventas:</h4>";
echo "Total de ventas: $" . number_format($totalVentas, 2) . "<br>";
// Promedio de ventas
$promedioVentas = $totalVentas / count($ventas);
echo "Promedio mensual: $" . number_format($promedioVentas, 2) . "<br>";
// Mes con mayores ventas
$mesMaximo = array_search(max($ventas), $ventas);
echo "Mes con mayores ventas: " . ucfirst($mesMaximo) . " con $" . number_format($ventas[$mesMaximo], 2) . "<br>";
// Mes con menores ventas
$mesMinimo = array_search(min($ventas), $ventas);
echo "Mes con menores ventas: " . ucfirst($mesMinimo) . " con $" . number_format($ventas[$mesMinimo], 2) . "<br>";
// Ordenar ventas (de mayor a menor)
arsort($ventas);
echo "<br><h5>Ventas ordenadas (mayor a menor):</h5>";
echo "<ul>";
foreach ($ventas as $mes => $cantidad) {
echo "<li>" . ucfirst($mes) . ": $" . number_format($cantidad, 2) . "</li>";
}
echo "</ul>";
// Calcular porcentaje respecto al total
echo "<h5>Porcentaje sobre el total:</h5>";
echo "<ul>";
foreach ($ventas as $mes => $cantidad) {
$porcentaje = ($cantidad / $totalVentas) * 100;
echo "<li>" . ucfirst($mes) . ": " . number_format($porcentaje, 1) . "%</li>";
}
echo "</ul>";
?>
Crea un sistema para gestionar calificaciones de estudiantes utilizando arrays:
$estudiantes
con al menos 3 estudiantesPistas:
$estudiantes = [ ["nombre" => "Ana", "edad" => 20, "calificaciones" => [...]], ... ];
array_sum()
y count()
sort()
o usort()
para ordenar el array por nombre