Tutorial: Ejercicios Básicos de PHP Parte 2 - Arrays Bidimensionales
Tutorial: Ejercicios Básicos de PHP Parte 2 - Arrays Bidimensionales
En PHP, un array bidimensional es esencialmente un array de arrays. Esto significa que cada elemento principal del array es, a su vez, otro array. Son muy útiles para representar tablas de datos, cuadrículas o cualquier estructura donde la información se organiza en filas y columnas.
Concepto Fundamental
Imagina una hoja de cálculo o una tabla de base de datos. Un array bidimensional simula esta estructura:
- El primer índice se refiere a la fila.
- El segundo índice se refiere a la columna.
Sintaxis Básica:
$matriz = array(
array(elemento_00, elemento_01, ...), // Fila 0
array(elemento_10, elemento_11, ...), // Fila 1
// ...
);
O utilizando la sintaxis de corchetes (preferida en PHP moderno):
$matriz = [
[elemento_00, elemento_01, ...], // Fila 0
[elemento_10, elemento_11, ...], // Fila 1
// ...
];
Ejercicio 1: Creación y Acceso Básico a un Array Bidimensional
Objetivo: Crear una matriz simple y acceder a sus elementos individuales.
Descripción: Simula una tabla de calificaciones donde las filas representan estudiantes y las columnas representan sus calificaciones en diferentes asignaturas.
<?php
// Definición de un array bidimensional (matriz de calificaciones)
// Fila 0: Calificaciones de Ana (Matemáticas, Física, Química)
// Fila 1: Calificaciones de Luis (Matemáticas, Física, Química)
// Fila 2: Calificaciones de Sofía (Matemáticas, Física, Química)
$calificaciones = [
[90, 85, 78], // Calificaciones de Ana
[75, 88, 92], // Calificaciones de Luis
[82, 95, 80] // Calificaciones de Sofía
];
echo "<h3>Ejercicio 1: Creación y Acceso Básico</h3>";
// Acceder a la calificación de Ana en Física (Fila 0, Columna 1)
// NOTA: Los índices comienzan en 0
$calif_ana_fisica = $calificaciones[0][1];
echo "Calificación de Ana en Física: " . $calif_ana_fisica . "<br>"; // Salida: 85
// Acceder a la calificación de Sofía en Química (Fila 2, Columna 2)
$calif_sofia_quimica = $calificaciones[2][2];
echo "Calificación de Sofía en Química: " . $calif_sofia_quimica . "<br>"; // Salida: 80
// Intentar acceder a un índice que no existe generará un error (Undefined offset)
// echo $calificaciones[0][3]; // Esto causaría un error si no se maneja
?>
Ejercicio 2: Recorriendo un Array Bidimensional con Bucles Anidados
Objetivo: Iterar sobre todos los elementos de un array bidimensional utilizando bucles for o foreach anidados.
Descripción: Muestra todas las calificaciones de la matriz definida anteriormente.
<?php
$calificaciones = [
[90, 85, 78],
[75, 88, 92],
[82, 95, 80]
];
$nombres_estudiantes = ["Ana", "Luis", "Sofía"];
$nombres_materias = ["Matemáticas", "Física", "Química"];
echo "<h3>Ejercicio 2: Recorriendo con Bucles Anidados</h3>";
// Recorriendo con bucles 'for' (útil cuando necesitas los índices)
echo "<h4>Usando bucles 'for':</h4>";
for ($fila = 0; $fila < count($calificaciones); $fila++) {
echo "Calificaciones de " . $nombres_estudiantes[$fila] . ": ";
for ($columna = 0; $columna < count($calificaciones[$fila]); $columna++) {
echo $nombres_materias[$columna] . ": " . $calificaciones[$fila][$columna] . " ";
}
echo "<br>";
}
echo "<h4>Usando bucles 'foreach':</h4>";
$indice_estudiante = 0;
foreach ($calificaciones as $calif_estudiante) {
echo "Calificaciones de " . $nombres_estudiantes[$indice_estudiante] . ": ";
$indice_materia = 0;
foreach ($calif_estudiante as $calif) {
echo $nombres_materias[$indice_materia] . ": " . $calif . " ";
$indice_materia++;
}
echo "<br>";
$indice_estudiante++;
}
?>
Ejercicio 3: Arrays Bidimensionales Asociativos
Objetivo: Crear y recorrer un array bidimensional donde tanto las filas como las columnas pueden tener claves asociativas (nombres en lugar de índices numéricos).
Descripción: Mejora la matriz de calificaciones para que los estudiantes y las materias sean identificados por sus nombres.
<?php
// Array bidimensional asociativo
$calificaciones_asociativo = [
"Ana" => [
"Matemáticas" => 90,
"Física" => 85,
"Química" => 78
],
"Luis" => [
"Matemáticas" => 75,
"Física" => 88,
"Química" => 92
],
"Sofía" => [
"Matemáticas" => 82,
"Física" => 95,
"Química" => 80
]
];
echo "<h3>Ejercicio 3: Arrays Bidimensionales Asociativos</h3>";
// Acceder a un elemento específico
echo "Calificación de Luis en Química: " . $calificaciones_asociativo["Luis"]["Química"] . "<br><br>"; // Salida: 92
// Recorrer el array asociativo
foreach ($calificaciones_asociativo as $estudiante => $materias) {
echo "Calificaciones de " . $estudiante . ":<br>";
foreach ($materias as $materia => $calificacion) {
echo " - " . $materia . ": " . $calificacion . "<br>";
}
echo "<br>";
}
?>
Ejercicio 4: Añadir y Modificar Elementos en un Array Bidimensional
Objetivo: Demostrar cómo agregar nuevas filas/columnas o modificar valores existentes.
Descripción: Añade un nuevo estudiante con sus calificaciones y actualiza una calificación existente.
<?php
$calificaciones = [
[90, 85, 78], // Ana
[75, 88, 92], // Luis
[82, 95, 80] // Sofía
];
echo "<h3>Ejercicio 4: Añadir y Modificar Elementos</h3>";
echo "<h4>Estado Inicial:</h4>";
echo "<pre>";
print_r($calificaciones);
echo "</pre>";
// Modificar la calificación de Ana en Física (Fila 0, Columna 1)
$calificaciones[0][1] = 87; // Antes 85, ahora 87
echo "Calificación de Ana en Física modificada a: " . $calificaciones[0][1] . "<br>";
// Añadir un nuevo estudiante (nueva fila)
// Se agrega al final del array principal
$calificaciones[] = [70, 80, 75]; // Calificaciones de un nuevo estudiante (ej. Pedro)
echo "Nuevo estudiante añadido.<br>";
// Añadir una nueva materia/calificación a un estudiante existente (nueva columna)
// Esto requiere acceder al array interno de un estudiante específico y añadirle un elemento.
// En un array numérico, esto no es intuitivo si las columnas representan materias fijas.
// Es más fácil con arrays asociativos:
$calificaciones_asociativo_mod = [
"Ana" => [
"Matemáticas" => 90,
"Física" => 85,
"Química" => 78
]
];
echo "<h4>Añadiendo una nueva materia (con array asociativo):</h4>";
$calificaciones_asociativo_mod["Ana"]["Historia"] = 92; // Añadir calificación de Historia para Ana
echo "<pre>";
print_r($calificaciones_asociativo_mod);
echo "</pre>";
echo "<h4>Estado Final de array numérico:</h4>";
echo "<pre>";
print_r($calificaciones);
echo "</pre>";
?>
Ejercicio 5: Cálculo de Promedios con Arrays Bidimensionales
Objetivo: Calcular promedios por estudiante y/o por materia utilizando los datos de la matriz.
Descripción: Calcula el promedio de cada estudiante y el promedio de cada materia.
<?php
$calificaciones = [
[90, 85, 78], // Ana
[75, 88, 92], // Luis
[82, 95, 80] // Sofía
];
$nombres_estudiantes = ["Ana", "Luis", "Sofía"];
$nombres_materias = ["Matemáticas", "Física", "Química"];
echo "<h3>Ejercicio 5: Cálculo de Promedios</h3>";
// Calcular promedio de cada estudiante
echo "<h4>Promedio por Estudiante:</h4>";
for ($fila = 0; $fila < count($calificaciones); $fila++) {
$suma_calificaciones_estudiante = 0;
foreach ($calificaciones[$fila] as $calif) {
$suma_calificaciones_estudiante += $calif;
}
$promedio_estudiante = $suma_calificaciones_estudiante / count($calificaciones[$fila]);
echo "Promedio de " . $nombres_estudiantes[$fila] . ": " . round($promedio_estudiante, 2) . "<br>";
}
// Calcular promedio por materia
echo "<h4>Promedio por Materia:</h4>";
$num_estudiantes = count($calificaciones);
$num_materias = count($calificaciones[0]); // Asumiendo que todos los estudiantes tienen el mismo número de materias
for ($columna = 0; $columna < $num_materias; $columna++) {
$suma_calificaciones_materia = 0;
for ($fila = 0; $fila < $num_estudiantes; $fila++) {
$suma_calificaciones_materia += $calificaciones[$fila][$columna];
}
$promedio_materia = $suma_calificaciones_materia / $num_estudiantes;
echo "Promedio en " . $nombres_materias[$columna] . ": " . round($promedio_materia, 2) . "<br>";
}
?>
Conclusión
Los arrays bidimensionales son una herramienta poderosa en PHP para organizar y manipular datos estructurados. Al dominar la creación, el acceso y el recorrido de estas matrices, ya sea numéricas o asociativas, estarás un paso más cerca de manejar datos complejos en tus aplicaciones web. La clave está en comprender la lógica de los índices (fila y columna) y la anidación de los bucles para procesar la información de manera eficiente.
Referencias Bibliográficas
American Psychological Association. (2020). Publication Manual of the American Psychological Association (7th
PHP.net. (s.f.). Arrays. Recuperado de
Comentarios
Publicar un comentario