Menu
CoddyTech

Итерация с вложенными циклами

Часть раздела Логика и управление потоком путешествия по 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";
    }
}
?>

Этот шаблон вложенных циклов — основа полной обработки двумерных массивов: выводите ли вы данные, выполняете вычисления или ищете определённые значения во всей сетке.

challenge icon

Задание

Легко

На вход подаётся одно значение: двумерный массив в формате 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


?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор PHP