본문 바로가기

카테고리 없음

PHP) 반복문 실행중 갑자기 빠져나가고 싶을때 ( 반복문 이탈하기, 루프 벗어나기 : break문 )

살다보면 그럴때가 있다.



뭘 하고싶은데 갑자기 하기가 싫고, 왼쪽으로 가야하는데 갑자기 가기 싫고, 밥먹고싶었는데 갑자기 먹기 싫고, 배가 아팠는데 갑자기 안아프고



내 의사도 바뀌지만 의사에 상관없이 저절로 바뀔때도 있다.







그렇다. 개소리다.








아무튼 PHP에서도 break구문을 지원한다.




1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
    for($i=0$i<10$i++)
    {
        if($i > 5)
        {
            break;
        }
        
        echo $i;
    }
 
?>
cs



예제코드를 설명하자면, 3행에서 일단 10번 반복하라고 명령을 내렸지만 5행에 조건문 하나가 붙어있다.


if($i > 5)


$i가 5보다 클 경우 break, 바로 위에 있는 반복문을 빠져나가라는 뜻이다.


그리고 10행에서의 출력문으로 원래의 출력값은


0123456789


가 되어야 하지만,


$i가 5보다 클때 break문을 실행하라고 했기때문에 출력값은


012345


가 되는것이다.






그렇다면 반복문안에 또 반복문이 있는 구조에서는 어떻게 해야할까?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
for($i=0$i<2$i++)
{
    for($j=0$j<3$j++)
    {
        if($j == 2)
        {
            break 2;
        }
        
        echo $j;
    }
}
 
?>
cs


위의 예제를 보자.


9행만 보면 된다.


break문은 break문인데, 2라는 값이 붙어있다.


이는 계층형 반복문을 사용할때 벗어날 수 있는 방법인데,


평소에는 break문을 선언했을때 뒤에 아무런 값이 없을 경우 1로 인식한다. 그렇기때문에 제일 가까운 반복문의 루프를 벗어나는 것이지만 2의 값을 붙일 경우 2번째로 가까운 반복문을 끝내버린다.


위의 예제를 살펴보자면


3행이 $i변수가 0인 상태에서 시작하여 내려오다 5행을 만난다.


for문 도중 for문이 실행된것이다. 이를 통상적으로 다중 for문이라고 부른다.


하지만 2번째 for문에는 조건이 하나 붙어있다.


if($j == 2)
        {
            break 2;
        }


변수 $j가 2일 경우 가까운 두번째 for문까지, 즉 위의 예제에는 for문이 2개밖에 없으니 모든 반복문을 벗어나라는 조건이 달린것이다.


그렇기때문에 2번 for문은 3번째 반복이 시작되자마자 모든 반복문을 종료하게 된다.


그럼 12행의 출력문은 2번만 실행되는 것이므로,


출력 결과는


01


이 되는것이다.




다음글) 반복문 무시하기



TIP)

PHP 5.4부터는 break문이나 continue문 뒤에 변수를 붙이는것이 불가능하다. break $i 같은 표현을 쓸 수 없다는 말이다.

그리고 break 0 처럼 쓰면 break 나 break 1 과 같은 뜻으로 인식했었는데 PHP 5.4부터는 이조차도 막혔다고 한다.