프로그래밍 언어/PHP

이중 for문

· 코딩마이데이

이중 for문은 for문 안에 다시 for문이 들어가는 구조입니다. 이중 for문의 원리를 파악하기 위해 다음의 예제를 살펴봅시다.

 

03/ex3-19.php

<?php
    for ($i = 1; $i <= 5; $i++) { // 02
        echo $i."행: ";
        for ($j = 1; $j <= 10; $j++) {
            echo $j." ";
        }
        echo "<br>";
    } // 08
?>

ex3-19.php의 실행 결과

 

 

02~08

for ($i = 1; $i <= 5; $i++) {
            ...
}

$i는 1에서 5까지의 값(1, 2, 3, 4, 5)을 가지고 반복 루프가 진행되는 동안 3~7행의 문장이 실행됩니다.

 

echo $i. "행 : ";

각 행의 제일 앞에 1행 : , 2행 : , ...을 출력합니다.

 

04~06

for ($j = 1; $j <= 10; $j++) {
            echo $j." ";
}

디음 실행 결과에 나타난 것과 같이 각 줄에 1 2 3 ... 10을 출력합니다. for문에 있는 각각의 $i의 값에 대해 내부 for문의 실행됩니다.

 

구구단표 만들기

이중 for문을 이용하여 2단~9단까지의 구구단을 출력하는 프로그램을 작성해봅시다.

 

03/ex3-20.php

<?php
    for ($i = 2; $i <= 9; $i++) { // 02
        echo $i."단 : ";
        for ($j = 1; $j <= 9; $j++) { // 04
            $x = $i * $j;
            echo $i."x".$j."=".$x." ";
        } // 07
        echo "<br>";
    } // 09
?>

ex3-20.php의 실행 결과

 

 

02~09

for ($i = 2; $i <= 9; $i++) {
        ...
}

$i 는 2에서 9까지의 값(2, 3, 4, ... 9)을 가지고 반복 루프가 진행되는 동안 3행에서 8행의 문장을 살행합니다. 여기서는 $i는 구구단의 각 단을 의미합니다.

 

04~07

for ($j = 1; $j <= 9; $j++) {
            $x = $i * $j;
            echo $i."x".$j."=".$x." ";

$i가 2일 때에는 디음 실행 결과의 첫 번째 줄에 나타난 것과 같이 2X1=2 2X2=4 2x9=18을 출력합니다. $i가 2일 때에는 실행 결과 두 번째 줄에서와 같이 2x1=2 2x2=4 2x3=6 2x4=8 ... 2x9=18을 출력합니다.

 

이와 같은 방법으로 $i가 3에서 9까지의 값을 가질 때 각 단에 해당하는 구구단을 화면에 출력합니다.

 

이번에는 위 예제를 조금 수정하여 다음 실행 결과와 같이 구구단을 표 형태로 출력하는 프로그램을 작성해봅시다.

 

03/ex3-21.php

<?php
    $string = ""; // 02
    $string .= "<table border='1'>";
    for ($i = 2; $i <= 9; $i++) {
        $string .= "<tr>";
        for ($j = 1; $j <= 9; $j++) {
            $x = $i * $j;
            $string .= "<td>".$i."x".$j."=".$x."</td>";
        }
        $string .= "</tr>";
    }
    $string .= "</table>";
    
    echo $string; // 14
?>

 

ex3-21.php의 실행 결과

 

 

02 $string = "";

문자열 $string을 빈 문자열 널("")로 초기화합니다.

 

3행, 5행, 8헹, 10행, 12행에서 할당 연산자 .=을 이용하여 널로 초기화된 문자열 $string에 구구단표로 출력할 내용을 추가해 나갑니다. 여기서 표 형태로 구구단표를 만들기 위해 <table>, <tr>, <td> 태그가 사용되었습니다.

 

14 echo $string;

$string에는 출력할 내용이 모두 들어가있습니다. echo문을 이용하여 실행결과에서와 같이 구구단표를 출력합니다.

 

숫자로 삼각형 형태 출력하기

이름 for문을 좀 더 연습해보기 위해 다음과 같이 숫자를 삼각형 형태로 출력하는 프로그램을 살펴봅시다.

 

03/ex3-22.php

<?php
    for ($i = 1; $i <= 9; $i++) {
        for ($j = 1; $j <= $i; $j++) { // 03
            echo $i;
        } // 05
        echo "<br>";
    }
?>

ex3-22.php의 실행 결과

 

03~05

for ($j = 1; $j <= $i; $j++) {
            echo $i;
}

여기 $j는 1에서 $i까지의 값(1씩 증가)을 가집니다. 2행의 for 루프에서 $i가 1일 때, 내부 for 루프에서 3행의 조건식은 $j <= 1이기 때문에 $j는 $i가 1일 때만 조건식이 참이 됩니다.

 

따라서 실행 결과에서의 첫 번째 줄에서와 같이 1 하나가 화면에 출력됩니다.

 

2행의 for 루프에서 $i가 2일 때는 내부 for 루프의 조건식은 $j<=2가 되기 때문에 $j는 1부터 2까지 반복되며,즉 4행의 문징이 두 번 실행됩니다. 따라서 실행 결과에서와 같이 2가 두 개 출력됩니다.

 

이와 같은 방법으로 다음 실행 결과에서와 같이 삼각형 형태의 숫자를 출력할 수 있습니다.

 

이번에는 다음 실행 결과에서와 같이 숫자를 역삼각형 형태로 출력하는 프로그램을 작성해봅시다.

 

03/ex3-23.php

<?php
    for ($i = 9; $i >= 1; $i--) { // 02
        for ($j = 1; $j <= $i; $j++) { // 03
            echo $i;
        } // 05
        echo "<br>";
    } // 07
?>

 

ex3-23.php의 실행 결과

 

02~07

for ($i = 9; $i >= 1; $i--) {
        ...

}

$i는 9부터 1까지의 값(9, 8, 7, ..., 1)을 가지고 반복 루프가 진행됩니다. $i--는 $i의 값을 1씩 감소시킵니다.

 

03~05

for ($j = 1; $j <= $i; $j++) {
            echo $i;
}

$j는 1에서 $i까지의 값(1씩 증가)을 가집니다. 2행의 for 루프에서 $i가 9일 때, 내부 for 루프에서 3행의 조건식 $j <= 9이 되기 때문에 $j는 1부터 9까지 반복되며, 즉 4행의 문장이 아홉 번 실행됩니다. 따라서 실행결과의 첫 번째 줄에 나타난 것과 같이 아홉 개의 숫자 9가 출력됩니다.

 

이와 같은 방법으로 실행 결과에 나타난 것과 같이 숫자로 역삼각형 형태로 출력할 수 있습니다.

 

별표(*)로 삼각형 형태 출력하기

이번에는 별표(*)로 삼각형을 만드는 다음의 프로그램을 살펴봅시다.

 

03/ex3-24.php

<?php
    for ($i = 1; $i <= 9; $i++) {
        for ($j = 1; $j <= 9 - $i; $j++) { // 03
            echo "&nbsp;";
        } // 05
        for ($j = 1; $j <= $i; $j++) { // 06
            echo "*";
        } // 08
        echo "<br>";
    }
?>

ex3-24.php의 실행 결과

 

03~05

for ($j = 1; $j <= 9 - $i; $j++) {
            echo "&nbsp;";
}

각 줄에서 공백을 출력합니다. 공백을 나타내는 특수 문자(&nbsp;)를 9-$i번 출력합니다.

2행의 for문에서 $i가 1이면, 3행의 조건식 $i는 9-1, 즉 8이 됩니다. 따라서 조건식은 $j <= 8이 됩니다. 3행~5행의 내부 for 문애서 $j는 1에서 8까지의 값(1, 2, 3, ..., 8)을 가지고 반복 루프가 8번 실행됩니다. 4행에 의해 실행 결과애서와 같이 공백을 8개 출력합니다. 이와 같은 방법으로 각 줄의 별(*) 앞에 공백을 출력할 수 있습니다.

 

06~08

for ($j = 1; $j <= $i; $j++) { 
            echo "*";

}

각 줄에서 공백 다음에 있는 별표(*)를 출력합니다. 반복 루프가 $j는 1부터 $i의 까지의 값(1씩 증가)을 가집니다. 예를 을어 $i가 5이면 값을 가지기 때문에 *가 5개 찍힙니다.

 

이와 같은 방법으로 다음 실행결과에서와 같은 형태로 별표(*)를 출력할 수 있습니다.

 

 

 

'프로그래밍 언어 > PHP' 카테고리의 다른 글

사용자 함수  (0) 2026.05.14
내장 함수  (0) 2026.05.13
섭씨/화씨 환산표 만들기  (0) 2026.05.09
for문으로 정수 합계 구하기  (0) 2026.05.09
for문  (0) 2026.05.08