Итерация с вложенными циклами
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 30 из 68.
При работе с двумерными массивами часто возникает необходимость обработать каждый отдельный элемент, что требует прохода по каждой строке, а затем по каждому столбцу внутри этой строки. Именно здесь вложенные циклы становятся незаменимыми — вы используете один цикл внутри другого для систематического обхода всей структуры сетки.
Внешний цикл перебирает каждую строку двумерного массива, в то время как внутренний цикл обрабатывает каждый элемент в текущей строке. Вот как это работает с циклом foreach:
<?php
$schedule = [
["Meeting", "Lunch", "Presentation"],
["Training", "Review", "Planning"],
["Workshop", "Break", "Demo"]
];
foreach ($schedule as $day) {
foreach ($day as $appointment) {
echo $appointment . "\n";
}
}
?>Вы также можете использовать традиционные циклы for, когда вам нужно больше контроля над индексами. Этот подход дает вам доступ к позициям как строк, так и столбцов:
<?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";
}
}
?>Этот паттерн вложенных циклов является фундаментальным для полной обработки двумерных массивов, независимо от того, отображаете ли вы данные, выполняете вычисления или ищете конкретные значения по всей структуре сетки.
Задание
ЛегкоВы получите один входной параметр: двумерный массив, представляющий схему рассадки в классе в формате JSON. Каждый внутренний массив представляет собой ряд мест, а каждый элемент содержит либо имя ученика, либо пустую строку для свободных мест. Прочитайте входные данные, преобразуйте строку JSON в двумерный массив, используйте вложенные циклы для перебора всей схемы рассадки и выведите имя каждого ученика вместе с его позицией в формате: Row X, Seat Y: Name
Пропускайте свободные места (пустые строки) и выводите информацию только для занятых мест. Ряды и места должны быть пронумерованы, начиная с 1 (а не с 0).
Формат входных данных: Одна строка, содержащая JSON-массив, представляющий схему рассадки (пример: [["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]])
Ожидаемый результат: Каждое занятое место выводится на отдельной строке в формате Row X, Seat Y: Name, где X — номер ряда, а Y — номер места (оба начинаются с 1)
Попробуйте сами
<?php
// Чтение входных данных JSON
$input = trim(fgets(STDIN));
// Преобразование строки JSON в двумерный массив
$seating = (array)json_decode($input, true);
// TODO: Напишите свой код ниже
// Используйте вложенные циклы для обхода рядов и мест
// Не забудьте пропускать пустые места и нумеровать ряды/места начиная с 1
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров