살다보면 그럴때가 있다.
뭘 하고싶은데 갑자기 하기가 싫고, 왼쪽으로 가야하는데 갑자기 가기 싫고, 밥먹고싶었는데 갑자기 먹기 싫고, 배가 아팠는데 갑자기 안아프고
내 의사도 바뀌지만 의사에 상관없이 저절로 바뀔때도 있다.
그렇다. 개소리다.
아무튼 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문에는 조건이 하나 붙어있다.
변수 $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부터는 이조차도 막혔다고 한다.