Menu
Coddy logo textTech

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

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

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