반응형
Web Development · PHP continue
PHP continue문 —
특정 회차만 건너뛰고 반복은 계속
중첩 if로 키마다 한국어 라벨을 붙이고, 정의되지 않은 키는 skip
시작 오늘 분석할 코드
회원 정보(이름·전화·연령·신장)가 들어 있는 연관 배열을 순회하면서 알고 있는 키만 한국어 라벨로 출력하고, 모르는 키(tel)는 건너뛰는 코드다.
<?php $member = array("name" => "○철수", "tel" => "03-0000-0000", "age" => 20, "tall" => 170); foreach($member as $key => $value){ if($key == "name"){ $title = "이름"; }else{ if($key == "age"){ $title = "연령"; }else{ if($key == "tall"){ $title = "신장"; }else{ print "처리를 건너뜁니다.<BR>"; continue; // 반복문을 계속 이어 나가는 것 } } } print "$title : $value"; print "<BR>"; } ?>
실제 출력 결과
이름 : ○철수
처리를 건너뜁니다.
연령 : 20
신장 : 170
처리를 건너뜁니다.
연령 : 20
신장 : 170
용어 용어 정리
continue현재 회차만 끝내고 다음 원소로 점프
연관 배열"키 => 값" 형식으로 저장된 배열
$key현재 원소의 키 (name, tel, age...)
$value키에 매칭된 값 (○철수, 20...)
$title한국어 라벨을 임시 저장하는 변수
if-else 중첩조건을 단계적으로 검사하는 구조
==두 값이 같은지 비교 (느슨한 비교)
// 주석PHP 한 줄 주석 — 실행 안 됨
1 왜 continue가 필요한가?
foreach는 모든 원소를 한 번씩 처리하지만, 때로는 "이번 원소는 건너뛰고 싶다"는 상황이 있다.
예시 시나리오
· 게시판에서 비공개 글은 건너뛰고 공개 글만 출력
· 회원 목록에서 탈퇴 상태인 사람은 표시 안 함
· 점수 배열에서 0점은 평균에서 제외
· 게시판에서 비공개 글은 건너뛰고 공개 글만 출력
· 회원 목록에서 탈퇴 상태인 사람은 표시 안 함
· 점수 배열에서 0점은 평균에서 제외
이때 break를 쓰면 거기서 끝나버린다. 우리가 원하는 건 "이번 한 회차만 빠져" → 다음 원소부터 다시 정상 진행. 그게 continue다.
2 코드 구조 — if-else 사다리
이 코드의 if-else는 키 값 4가지 경우를 단계적으로 거른다.
if ($key == "name") → 이름 else if ($key == "age") → 연령 else if ($key == "tall") → 신장 else → 처리를 건너뜁니다 + continue
실제 코드는 else 안에 또 if를 넣는 식으로 깊게 들어가 있지만, 동작은 elseif 체인과 동일하다.
원본 — 중첩 else
else 안에 또 if를 적는다
들여쓰기가 깊어짐 → 가독성↓
하지만 의미는 같다
들여쓰기가 깊어짐 → 가독성↓
하지만 의미는 같다
현대식 — elseif 체인
if / elseif / elseif / else
평평한 한 줄 들여쓰기
같은 동작, 더 읽기 쉬움
평평한 한 줄 들여쓰기
같은 동작, 더 읽기 쉬움
3 continue가 동작하는 순간
키가 "tel"일 때, 어느 if도 참이 아니라 마지막 else로 떨어진다. 거기서 두 가지가 일어난다.
else { print "처리를 건너뜁니다.<BR>"; ← (1) 안내 메시지 출력 continue; ← (2) 즉시 다음 원소로 점프 }
continue를 만나는 순간 PHP는 그 줄 아래의 print "$title : $value"를 건너뛰고 foreach의 시작점으로 돌아간다. 다음 원소(age => 20)부터 정상 진행.
※ 만약
continue가 없었다면? $title은 직전 회차의 값이 그대로 남아 있어서 "이름 : 03-0000-0000" 같은 엉뚱한 출력이 나온다.4 반복 흐름 단계별 추적
1
$key = "name", $value = "○철수"name 일치 → $title = "이름" → "이름 : ○철수" 출력
2
$key = "tel", $value = "03-0000-0000"name·age·tall 모두 불일치 → "처리를 건너뜁니다." 출력 → continue → 다음 원소
3
$key = "age", $value = 20age 일치 → $title = "연령" → "연령 : 20" 출력
4
$key = "tall", $value = 170tall 일치 → $title = "신장" → "신장 : 170" 출력
5
foreach 종료모든 원소 순회 완료
반응형
5 break vs continue — 결정적 차이
break 만났을 때
반복문 자체를 끝내고 밖으로
남은 모든 원소 처리 안 함
결과: 이름 ○철수 한 줄만 출력
남은 모든 원소 처리 안 함
결과: 이름 ○철수 한 줄만 출력
continue 만났을 때
이번 원소만 건너뛰고 다음으로
반복문은 끝까지 살아 있음
결과: tel만 빠지고 나머지 모두 출력
반복문은 끝까지 살아 있음
결과: tel만 빠지고 나머지 모두 출력
설문 응답을 처리한다고 가정
· continue = 무응답 응답자는 건너뛰지만 나머지는 다 본다
· break = 무응답이 한 명이라도 보이면 즉시 처리 중단
· continue = 무응답 응답자는 건너뛰지만 나머지는 다 본다
· break = 무응답이 한 명이라도 보이면 즉시 처리 중단
6 elseif로 평평하게 다시 쓰기
같은 동작을 더 읽기 쉽게 정리하면 다음과 같다.
foreach ($member as $key => $value) { if ($key == "name") $title = "이름"; elseif ($key == "age") $title = "연령"; elseif ($key == "tall") $title = "신장"; else { print "처리를 건너뜁니다.<BR>"; continue; } print "$title : $value<BR>"; }
※ 연관 배열로 라벨 매핑하기 (실무 패턴)
- 라벨 매핑 배열:
$labels = ["name" => "이름", "age" => "연령", "tall" => "신장"]; - 존재 검사:
if (!isset($labels[$key])) continue; - 출력:
print "$labels[$key] : $value<BR>"; - 키가 늘어도 if 체인을 늘릴 필요 없이 배열만 추가하면 끝
7 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
continue를 빼먹음 |
$title이 직전 값으로 남아 출력 오류 | else 블록에 반드시 continue; |
break로 잘못 씀 |
첫 미스매치에서 반복 자체가 끝남 | 건너뛰기엔 continue 사용 |
| == 대신 = 사용 | 비교가 아니라 대입 → 항상 참 | 비교는 ==, 엄격하면 === |
| 중첩 if 들여쓰기 누락 | else가 어느 if에 붙는지 헷갈림 | elseif 체인으로 평평하게 |
| switch에서 continue 사용 | PHP에서는 switch 안 continue가 break처럼 동작 | 루프 건너뛰려면 continue 2; |
8 알아두면 좋은 — continue 2;
중첩 반복에서 안쪽 루프뿐 아니라 바깥 루프의 다음 회차로 점프할 수 있다.
foreach ($users as $user) { ← 바깥 루프 foreach ($user->orders as $o) { ← 안쪽 루프 if ($o->canceled) { continue 2; ← 바깥 루프의 다음 user로 점프 } } }
※ PHP의 특이점:
switch 안에서 continue;는 break;와 같다. 바깥 루프의 다음 회차로 가려면 반드시 continue 2;로 적어야 한다.핵심 한 줄 요약
continue이번 회차만 건너뛰고 다음 원소로 점프
동작아래 코드 무시 + foreach 시작점으로 복귀
필요한 이유$title이 이전 값으로 남는 사고 방지
vs breakcontinue는 1회 skip, break는 반복문 종료
if-else 사다리elseif 체인으로 평평하게 쓰는 게 가독성↑
continue 2;중첩 루프의 바깥 회차로 점프
실무 패턴라벨 매핑 배열로 if 체인을 줄일 수 있다
반응형
'php' 카테고리의 다른 글
| PHP foreach + 중첩 if — 키별 한국어 라벨 변환 완전 정리 (1) | 2026.06.13 |
|---|---|
| PHP foreach — 연관 배열 key=>value 반복 완전 정리 (1) | 2026.06.13 |
| PHP break문 — foreach 반복 중단 완전 정리 (0) | 2026.06.12 |
| PHP 디렉토리 읽기 — opendir / readdir / closedir 완전 정리 (1) | 2026.06.12 |
| PHP while 반복문 — 조건이 참인 동안 반복하는 선검사 루프 (0) | 2026.06.12 |
왕진 블로그

댓글