중첩 루프로 반복하기
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨. 68개 중 30번째.
2D 배열로 작업할 때는 모든 요소를 하나씩 처리해야 하는 경우가 많으며, 그러려면 각 row를 방문한 다음 해당 row 안의 각 열을 방문해야 합니다. 이때 nested loops가 필수적입니다. 전체 grid 구조를 체계적으로 순회하기 위해 하나의 loop를 다른 loop 안에 사용합니다.
외부 루프는 2D array의 각 row를 순회하고, 내부 루프는 현재 row 내의 각 요소를 처리합니다. 이것이 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";
}
}
?>이 중첩 루프 패턴은 데이터를 표시하거나, 계산을 수행하거나, 전체 grid 구조에서 특정 값을 검색하는 등 2D 배열을 완전히 처리하는 데 기본이 됩니다.
챌린지
쉬움JSON 형식의 교실 seating arrangement를 나타내는 2D array인 하나의 input을 받습니다. 각 내부 array는 seats의 한 row를 나타내며, 각 요소에는 학생의 이름 또는 빈 seats를 나타내는 empty string이 포함됩니다. input을 Read하고, JSON string을 2D array로 Convert한 다음, nested loops를 사용하여 전체 seating arrangement를 iterate하고, 각 학생의 이름과 위치를 다음 형식으로 출력합니다: Row X, Seat Y: Name
빈 seats(empty strings)는 skip하고 occupied seats에 대한 정보만 출력합니다. rows와 seats는 1부터 starting하여 번호를 매겨야 합니다(0이 아님).
input 형식: seating arrangement를 나타내는 JSON array가 포함된 한 줄(예: [["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]])
예상 출력: 각 occupied seat을 다음 형식으로 별도의 줄에 출력합니다. Row X, Seat Y: Name 여기서 X는 row number이고 Y는 seat number입니다(둘 다 1부터 starting).
직접 해보기
<?php
// JSON 입력을 읽습니다
$input = trim(fgets(STDIN));
// JSON 문자열을 2D 배열로 변환합니다
$seating = (array)json_decode($input, true);
// TODO: 아래에 코드를 작성하세요
// 중첩 루프를 사용하여 행과 좌석을 순회합니다
// 빈 좌석을 건너뛰고 행/좌석 번호를 1부터 매기는 것을 기억하세요
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러