본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP 제어문 — if · switch · for · while · foreach 완전 정리

by 왕진 2026. 6. 11.
반응형

 

 

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>"; } ?>
출력 결과
localhost/for.php
1회째의 반복입니다.
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, 반복문, 티스토리
반응형

댓글