Menu
Coddy logo textTech

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

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

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

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

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

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

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

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

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

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)

Шпаргалка

Используйте вложенные циклы для обработки каждого элемента в двумерном массиве. Внешний цикл перебирает строки, а внутренний цикл обрабатывает элементы внутри каждой строки.

Использование циклов 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


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

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

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