Iterar con bucles anidados
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 30 de 68.
Al trabajar con arreglos bidimensionales, a menudo es necesario procesar cada elemento, lo que requiere visitar cada fila y luego cada columna dentro de esa fila. Aquí es donde los bucles anidados se vuelven esenciales: se utiliza un bucle dentro de otro para recorrer sistemáticamente toda la estructura de la cuadrícula.
El bucle externo itera a través de cada fila del array bidimensional, mientras que el bucle interno procesa cada elemento dentro de la fila actual. Así es como funciona esto con un bucle foreach:
<?php
$schedule = [
["Meeting", "Lunch", "Presentation"],
["Training", "Review", "Planning"],
["Workshop", "Break", "Demo"]
];
foreach ($schedule as $day) {
foreach ($day as $appointment) {
echo $appointment . "\n";
}
}
?>También puedes usar bucles for tradicionales cuando necesites más control sobre los índices. Este enfoque te da acceso tanto a las posiciones de las filas como a las de las columnas:
<?php
for ($row = 0; $row < count($schedule); $row++) {
for ($col = 0; $col < count($schedule[$row]); $col++) {
echo "Day " . ($row + 1) . ", Time " . ($col + 1) . ": " . $schedule[$row][$col] . "\n";
}
}
?>Este patrón de bucles anidados es fundamental para procesar arreglos bidimensionales por completo, ya sea que estés mostrando datos, realizando cálculos o buscando valores específicos a través de toda la estructura de cuadrícula.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilRecibirás una entrada: un array bidimensional que representa la disposición de los asientos de un aula en formato JSON. Cada array interno representa una fila de asientos, y cada elemento contiene el nombre de un estudiante o una cadena vacía para los asientos vacantes. Lee la entrada, convierte la cadena JSON en un array bidimensional, utiliza bucles anidados para recorrer toda la disposición de los asientos y muestra el nombre de cada estudiante junto con su posición en el formato: Row X, Seat Y: Name
Omite los asientos vacantes (cadenas vacías) y solo muestra la información de los asientos ocupados. Las filas y los asientos deben numerarse empezando desde 1 (no desde 0).
Formato de entrada: Una línea que contiene un array JSON que representa la disposición de los asientos (ejemplo: [["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]])
Salida esperada: Cada asiento ocupado impreso en una línea separada en el formato Row X, Seat Y: Name, donde X es el número de fila e Y es el número de asiento (ambos empezando desde 1)
Hoja de referencia
Usa bucles anidados para procesar cada elemento en un array bidimensional. El bucle externo itera a través de las filas, mientras que el bucle interno procesa los elementos dentro de cada fila.
Usando bucles foreach:
<?php
$schedule = [
["Meeting", "Lunch", "Presentation"],
["Training", "Review", "Planning"],
["Workshop", "Break", "Demo"]
];
foreach ($schedule as $day) {
foreach ($day as $appointment) {
echo $appointment . "\n";
}
}
?>Usando bucles for tradicionales para el acceso por índice:
<?php
for ($row = 0; $row < count($schedule); $row++) {
for ($col = 0; $col < count($schedule[$row]); $col++) {
echo "Day " . ($row + 1) . ", Time " . ($col + 1) . ": " . $schedule[$row][$col] . "\n";
}
}
?>Pruébalo tú mismo
<?php
// Leer la entrada JSON
$input = trim(fgets(STDIN));
// Convertir la cadena JSON a un arreglo bidimensional
$seating = (array)json_decode($input, true);
// TODO: Escribe tu código a continuación
// Usa bucles anidados para iterar a través de filas y asientos
// Recuerda omitir los asientos vacíos y numerar las filas/asientos comenzando desde 1
?>Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Funciones avanzadas
Funciones anónimasClosures y 'use'Funciones de flechaFunciones callbackUso de 'call_user_func'Funciones variablesPaso por referenciaFunciones recursivasResumen: Miscelánea de funciones4Arreglos multidimensionales
Crear un arreglo 2DAcceder a elementos de un arreglo 2DModificar elementos de un arreglo 2DIterar con bucles anidadosArreglos asociativos 2DResumen: Ejercicio de cuadrícula simple2Manipulación avanzada de arrays
Agregar con 'array_push'Eliminar con 'array_pop'Agregar con 'array_unshift'Eliminar con 'array_shift'Fusionar arrays indexadosFusionar arrays asociativosExtraer con 'array_slice'Valores con 'in_array'Claves con 'array_search'Resumen: Ejercicio de Playlist3Ordenar Arrays
Ordenar arrays indexados de forma ascendenteOrdenar arrays indexados de forma descendenteOrdenar arrays asociativos por valorOrdenar arrays asociativos por claveOrdenación por orden naturalOrdenación personalizada con 'usort'Resumen: Ordenar tablas de clasificación