Итерация с вложенными циклами
Часть раздела Логика и управление потоком путешествия по 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)
Шпаргалка
Используйте вложенные циклы для обработки каждого элемента в двумерном массиве. Внешний цикл перебирает строки, а внутренний цикл обрабатывает элементы внутри каждой строки.
Использование циклов 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";
}
}
?>Попробуйте сами
<?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'Итоги: Сортировка таблицы лидеров