Ejercicios basicos php parte2 (arrays bidimensionales)

 

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:

PHP
$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):

PHP
$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
<?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
<?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
<?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
<?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
<?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 ed.). https://apastyle.apa.org/

PHP.net. (s.f.). Arrays. Recuperado de https://www.php.net/manual/es/language.types.array.php



Comentarios