CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8"> 
    <link rel="icon" type="image/png" href="../webroot/media/favicon/favicon-32x32.png">
    <link rel="stylesheet" href="../webroot/css/estilosHome.css">
    <title>Gonzalo Junquera Lorenzo</title>
    <style>
        td{
            border: 1px solid black;
            border-radius: 5px;
            max-width: 65px;
            width: 65px;
            height: 30px;
            text-align: center;
            background-color: rgb(188, 140, 119);
        }
        th{
            padding-right: 10px;
        }
        .ocupado{
            background-color: greenyellow;
        }
        h3{
            text-align: center;
            margin: 10px 0px;
        }
    </style>
</head>
<body>
    <div id="aviso">CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES</div>
    <nav>
        <div><a href="../indexProyectoTema3.php">Volver</a></div>
        <h2> <a href="../indexProyectoTema3.php">Tema 3</a> - Ejercicio 17</h2>
        <h2>Gonzalo Junquera Lorenzo</h2>
    </nav>
    <main>
       <?php 
       /**
        * @author: Gonzalo Junquera Lorenzo
        * @since: 27/10/2025
        * 17.Inicializar un array (bidimensional con dos índices numéricos) donde almacenamos el nombre de las personas 
        * que tienen reservado el asiento en un teatro de 20 filas y 15 asientos por fila. (Inicializamos el array ocupando 
        * únicamente 5 asientos). Recorrer el array con distintas técnicas (foreach(), while(), for()) para mostrar los 
        * asientos ocupados en cada fila y las personas que lo ocupan.
        */

        // --- 1. Inicialización del array bidimensional para el teatro (20 filas x 15 asientos) ---
        // Constantes con datos iniciales
        const FILAS = 20;
        const ASIENTOS = 15;

        // Bucle FOR anidado para inicializar todos los asientos a 'null' (vacíos)
        for($iFila=1;$iFila<=FILAS;$iFila++){
            for($iColumna=1;$iColumna<=ASIENTOS;$iColumna++){
                $aTeatro[$iFila][$iColumna]=null;
            }
        }

        // --- 2. Simulación de reservas (Ocupación de asientos) ---
        $aTeatro[1][1]="Juan";
        $aTeatro[8][13]="Pepe";
        $aTeatro[3][8]="Alfredo";
        $aTeatro[7][11]="Miguel";
        $aTeatro[2][2]="Miguel";
        $aTeatro[20][15]="Maria";
        
        // =========================================================================
        // === SECCIÓN A: Visualización de la Tabla HTML con FOREACH (Opción óptima)
        // =========================================================================
        echo '<h3>Tabla de Asientos (Recorrido con foreach)</h3>';
        print '<table>';
        
        
        foreach ($aTeatro as $numFila=>$aFila) { // Recorremos las filas
            echo "<tr>";
            echo "<th>Fila ".$numFila."</th>";
            foreach ($aFila as $numAsiento=>$asiento) { // Recorremos los asientos dentro de la fila
                if(is_string($asiento)){ // Asiento ocupado
                    echo '<td class="ocupado">'.$asiento.'</td>';
                } else { // Asiento libre
                    echo '<td>'.$numFila.'-'.$numAsiento.'</td>';
                }
            }
            echo "</tr>";
        }
        echo "</table>";
        
        // =========================================================================
        // === SECCIÓN B: Tabla generada con FOR Anidado
        // =========================================================================

        echo '<h3>Tabla de Asientos (Recorrido con for)</h3>';
        echo '<table>';

        for ($iFila = 1; $iFila <= FILAS; $iFila++) { // Recorremos las filas 
            echo "<tr>";
            echo "<th>Fila ".$iFila."</th>"; 
            
            // Recorremos los asientos dentro de la fila
            for ($jAsiento = 1; $jAsiento <= ASIENTOS; $jAsiento++) {
                
                $nombreOcupante = $aTeatro[$iFila][$jAsiento];
                
                // Comprueba si está ocupado
                if (is_string($nombreOcupante)) {
                    echo '<td class="ocupado">'.$nombreOcupante.'</td>';
                } else {
                    echo '<td>'.$iFila.'-'.$jAsiento.'</td>';
                }
            }
            echo "</tr>";
        }

        echo "</table>";

        // =========================================================================
        // === SECCIÓN C: Tabla generada con WHILE Anidado
        // =========================================================================

        echo '<h3>Tabla de Asientos (Recorrido con while)</h3>';
        echo '<table>';

        // Inicialización de contadores para el WHILE
        $numFila = 1;

        // Bucle WHILE externo para recorrer las filas
        while ($numFila <= FILAS) {
            echo "<tr>";
            echo "<th>Fila ".$numFila."</th>"; 
            
            $numAsiento = 1; // 💡 Inicializamos el contador de asiento DENTRO del bucle de fila
            
            // Bucle WHILE interno para recorrer los asientos
            while ($numAsiento <= ASIENTOS) {
                
                $nombreOcupante = $aTeatro[$numFila][$numAsiento];
                
                // Comprueba si está ocupado
                if (is_string($nombreOcupante)) {
                    echo '<td class="ocupado">'.$nombreOcupante.'</td>';
                } else {
                    echo '<td>'.$numFila.'-'.$numAsiento.'</td>';
                }
                
                $numAsiento++; // Incremento obligatorio del contador del asiento
            }
            
            echo "</tr>";
            $numFila++; // Incremento obligatorio del contador de la fila
        }

        echo '</table>';

        // =========================================================================
        // === SECCIÓN D: Tabla generada con WHILE usando next(), key(), current()
        // =========================================================================

        echo '<h3>Tabla de Asientos (Recorrido con while y funciones)</h3>';
        echo '<table>';

        // Reiniciar el puntero de la matriz principal a la primera fila
        reset($aTeatro);

        // Bucle WHILE externo: Recorre las filas
        // La primera iteración es la Fila 1 (después de reset). next() se ejecuta al final para avanzar a la siguiente fila.
        while (($filaActual = current($aTeatro)) !== false) {
            $indiceFila = key($aTeatro);

            echo '<tr>';
            echo "<th>Fila ".$indiceFila."</th>";

            reset($filaActual); //se situa el puntero al comienzo del array
            while (($nombre = current($filaActual)) !== false) {
                $indiceAsiento = key($filaActual);

                // Comprueba si está ocupado
                if (is_string($nombre)) {
                    echo '<td class="ocupado">'.$nombre.'</td>';
                } else {
                    echo '<td>'.$indiceFila.'-'.$indiceAsiento.'</td>';
                }

                next($filaActual);
            }
            echo '</tr>';

            next($aTeatro);
        }
        echo '</table>';
        
        
       ?>
    </main>
</body>
</html>