Итерация с вложенными циклами
Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 30 из 68.
При работе с двумерными array часто требуется обработать каждый отдельный элемент, для чего нужно посетить каждую rows, а затем каждый столбец внутри этой rows. Здесь nested loops становятся необходимыми. Вы используете один цикл внутри другого, чтобы систематически пройти по всей структуре grid.
Внешний цикл проходит через каждую строку двумерного массива, а внутренний цикл обрабатывает каждый элемент в текущей строке. Вот как это работает с циклом foreach:
<?php
$schedule = [
["Meeting", "Lunch", "Presentation"],
["Training", "Review", "Planning"],
["Workshop", "Break", "Demo"]
];
foreach ($schedule as $day) {
foreach ($day as $appointment) {
echo $appointment . "\n";
}
}
?>Ты также можешь использовать традиционные циклы for, когда тебе нужен больший контроль над индексами. Такой подход даёт тебе доступ как к позициям row, так и к позициям столбцов:
<?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";
}
}
?>Этот шаблон вложенных циклов имеет fundamentalное значение для полной обработки двумерных массивов, независимо от того, отображаешь ли ты данные, выполняешь вычисления или ищешь определённые значения во всей структуре grid.
Задание
ЛегкоВы получите один входной параметр: двумерный массив, представляющий расположение мест в классе в формате 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'Итоги: Сортировка таблицы лидеровПотренируйтесь самостоятельно: Онлайн-компилятор PHP