반응형
Web Development · PHP
PHP 제어문 완전 정리
if · switch · for · while · foreach
조건 분기와 반복 — 흐름을 다루는 5가지 도구
시작 흐름 제어 5가지
프로그램은 위에서 아래로 한 줄씩 실행되지만, 실제 일은 "이 조건일 때만", "이 만큼 반복"처럼 흐름을 바꿔야 한다. PHP가 제공하는 5가지 — if · switch · for · while · foreach — 를 실전 예제와 함께 정리한다.
용어 핵심 키워드
if조건이 참이면 실행
else / elseif아니면 / 그것도 아니면
switch한 변수의 여러 값 비교
case / defaultswitch 안의 분기
breakswitch/loop 빠져나가기
for정해진 횟수 반복
while조건이 참인 동안 반복
do-while최소 1회 보장
foreach배열을 자동 순회
count()배열 크기 반환
&& / ||AND / OR
!== / ==엄격/느슨 비교
1 if — 조건이 참일 때만
<?php $username = "user"; $password = "pass"; $db_data["username"] = "user"; $db_data["password"] = "pass"; if ($db_data["username"] == $username && $db_data["password"] == $password) { print "회원 페이지입니다."; } ?>
📌
&&는 AND — 둘 다 참이어야 전체 참. ||는 OR — 하나만 참이어도 전체 참.if-else — 그게 아니면
if ($db_data["username"] == $username && $db_data["password"] == $password) { print "회원 페이지입니다."; } else { print "로그인에 실패하였습니다."; }
중첩 if — 단계별 분기
$type = "form"; if ($type == "form") { print "등록 폼입니다."; } else { if ($type == "exec") { print "등록 처리를 실행중"; } else { print "화면이 없습니다."; } } // 더 깔끔한 elseif 형태 if ($type == "form") { print "등록 폼"; } elseif ($type == "exec") { print "등록 처리"; } else { print "화면 없음"; }
⚠ 중괄호 생략 주의 —
if (조건) 한줄;처럼 중괄호 없이 쓸 수 있지만, 실수로 한 줄을 더 쓰면 if와 무관하게 실행된다. 중괄호 항상 쓰는 게 안전.2 switch — 여러 값과 비교할 때
<?php $type = "form"; switch ($type) { case "form": print "등록 폼입니다."; break; case "confirm": print "확인 화면입니다."; break; case "exec": print "등록처리를 실행중"; break; default: print "화면이 없습니다."; } ?>
⚠ break 빼먹지 말기 — break가 없으면 다음 case도 계속 실행된다(fall-through). 의도적이지 않다면 매 case마다 break.
if-elseif
- 각 분기마다 다른 조건 가능
- 범위 비교(>, <) 가능
- 복잡한 조건식
switch
- 한 변수의 값만 비교
- == 비교 (느슨)
- case가 많을 때 가독성 좋음
3 for — 정해진 횟수 반복
<?php for ($i = 1; $i < 5; $i++) { // ↑ 초기값 ↑ 조건 ↑ 증감 print $i."회째의 반복입니다.<br>"; } ?>
출력 결과
1회째의 반복입니다.
2회째의 반복입니다.
3회째의 반복입니다.
4회째의 반복입니다.
2회째의 반복입니다.
3회째의 반복입니다.
4회째의 반복입니다.
for 3요소
1초기값 — 한 번만 실행 (
$i = 1)2조건 검사 — 거짓이면 종료 (
$i < 5)3본문 실행 — 중괄호 안
4증감 — 본문 후 (
$i++) → 다시 2번으로4 실전 — for + count()로 배열 순회
<?php $PrefectureList = array("서울특별시", "부산광역시", "대구광역시", ..., "평안남도", "황해도"); for ($i = 0; $i <= count($PrefectureList) - 1; $i++) { print $PrefectureList[$i]; print "<br>"; } ?>
📐
count($arr) - 1 = 마지막 인덱스. 배열이 22개면 인덱스는 0~21이므로 $i <= 21까지 반복. 더 흔하게 쓰는 형태는 $i < count($arr).for로 select 옵션 만들기 — HTML 동적 생성
$html = "<select name=\"prefecture\">\n"; for ($i = 0; $i < count($PrefectureList); $i++) { $html .= "<option value=\"$i\">$PrefectureList[$i]</option>\n"; } $html .= "</select>\n"; print $html;
💡 \"의 의미 — 큰따옴표 안에서 큰따옴표를 쓰려면 백슬래시로 이스케이프 필요.
\"prefecture\" = 그대로 "prefecture" 출력.반응형
5 while — 조건이 참인 동안
<?php $i = 0; while ($i <= 10) { print $i++; // 출력 후 증가 print "<br>"; } ?>
while + 디렉토리 읽기 — 실전 패턴
if ($dirhandle = opendir('.')) { // 현재 디렉토리 열기 while (false !== ($filename = readdir($dirhandle))) { print $filename."<br>"; } closedir($dirhandle); }
📌
!==(엄격 부등) vs !=(느슨 부등) — readdir이 빈 문자열 ""을 돌려줄 수도 있는데, !=로 비교하면 false와 같다고 판정해 잘못 종료된다. 그래서 타입까지 비교하는 !==를 쓴다.6 do-while — 무조건 1회는 실행
<?php $i = 0; do { print $i++; print "<br>"; } while ($i <= 10); ?>
while
- 조건 검사 → 참이면 본문
- 처음부터 거짓이면 0회 실행
do-while
- 본문 실행 → 조건 검사
- 최소 1회는 무조건 실행
- "먼저 해보고 계속할지 정한다"
7 foreach — 배열 전용 반복
<?php $week = array("월", "화", "수", "목", "금", "토", "일"); foreach ($week as $value) { print $value; print "<br>"; } ?>
배열의 각 요소를 자동으로 $value에 담아준다. 인덱스 따로 관리할 필요 없음.
key까지 함께 가져오기
$member = array("name" => "철수", "age" => 20); foreach ($member as $key => $value) { print "$key : $value<br>"; } // name : 철수 // age : 20
※ for vs foreach
- for — 인덱스를 직접 사용해야 할 때 (조건문, 건너뛰기 등)
- foreach — 모든 요소를 그냥 한 번씩 돌고 싶을 때 (대부분의 경우)
- foreach가 더 안전하고 가독성 좋음 — 인덱스 실수가 없다
8 5가지 반복문 한눈에
| 구문 | 언제 쓰나 | 특징 |
|---|---|---|
if |
조건 분기 (반복 X) | elseif로 다단계 |
switch |
한 변수의 여러 값 분기 | break 필수 |
for |
횟수가 정해진 반복 | i 0부터 N까지 |
while |
조건이 변하는 동안 반복 | 0회도 가능 |
do-while |
최소 1회 보장 + 조건 반복 | 본문 → 조건 순서 |
foreach |
배열 순회 (가장 많이 씀) | 인덱스 자동 관리 |
9 자주 하는 실수
| 증상 | 원인 | 해결 |
|---|---|---|
| switch에서 여러 case 동시 실행 | break 누락 | 매 case 끝에 break; |
| = 와 == 헷갈림 | 대입과 비교 혼동 | 비교는 ==, 엄격 비교는 === |
| for 무한 루프 | 증감식 누락 또는 조건 오류 | $i++ 확인, 조건 점검 |
| readdir 결과 중간에 멈춤 | != 사용 (느슨 비교) | !== 엄격 비교 |
| foreach 안에서 원본 수정 안 됨 | $value는 복사본 | foreach ($arr as &$value) — 참조 |
| count()를 매 반복마다 호출 | 성능 손해 | $n = count($arr); 미리 저장 |
10 핵심 한 줄 요약
PHP — CONTROL FLOW
if 분기if (조건) { ... } elseif { ... } else { ... }
switch 분기switch ($v) { case "a": ... break; default: ... }
정해진 반복for ($i=0; $i<N; $i++) { ... }
조건 반복while (조건) { ... }
최소 1회 보장do { ... } while (조건);
배열 순회foreach ($arr as $value) — 또는 $key => $value
배열 길이count($arr)
엄격 비교!== / === (타입까지)
Tags
#PHP #제어문 #if #ifelse #switch #for #while #doWhile #foreach #count #반복문 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, 제어문, if, ifelse, switch, for, while, doWhile, foreach, count, 반복문, 티스토리
반응형
'php' 카테고리의 다른 글
| PHP return · 변수 범위 · static · 문자열 함수 완전 정리 (0) | 2026.06.11 |
|---|---|
| PHP foreach · function · break · continue · require 완전 정리 (0) | 2026.06.11 |
| PHP 변수 · 연산자 · 연관배열 · explode 완전 정리 (0) | 2026.06.11 |
| PHP 시작 — print · echo · HTML 임베딩 완전 정리 (1) | 2026.06.11 |
| XML 구조 + BookApp CRUD UI 완전 정리 (0) | 2026.06.11 |
왕진 블로그

댓글