반응형
Web Development · PHP foreach + if
PHP foreach + 중첩 if —
키별로 한국어 라벨 붙이기
$key 값에 따라 출력 라벨을 다르게 만드는 패턴
시작 오늘 분석할 코드
회원 정보 연관 배열을 순회하면서 키 이름(name·age·tall)을 한국어 라벨(이름·연령·신장)로 변환해 출력한다. 핵심은 foreach 안에 들어간 중첩 if-else 구조다.
<?php $member = array("name" => "○철수", "age" => 20, "tall" => 170); // member변수에 연관배열을 저장 foreach($member as $key => $value){ // foreach로 반복문을 진행함 if($key == "name"){ // 만약 key 변수의 값이 "name"과 같다면 $title = "이름"; }else{ if($key == "age"){ $title = "연령"; }else{ if($key == "tall"){ $title = "신장"; } } } print "$title : $value"; print "<BR>"; } ?>
실제 출력 결과
이름 : ○철수
연령 : 20
신장 : 170
연령 : 20
신장 : 170
용어 용어 정리
foreach배열 원소를 한 번씩 꺼내 반복
if-else조건에 따라 두 갈래로 나뉘는 분기
중첩 (nesting)if 안에 또 if를 두는 구조
$key현재 회차의 배열 키
$value현재 회차의 배열 값
$title한국어 라벨을 임시 저장하는 변수
==두 값이 같은지 비교 (느슨한 비교)
elseifif-else를 평평하게 잇는 키워드
1 왜 라벨 변환이 필요한가?
DB 컬럼명이나 폼 input의 name 속성은 보통 영문 약어로 만든다 (name, age, tel, addr...). 코드에서 다루기 편하기 때문. 하지만 화면에 그대로 보여줄 수는 없다 — 사용자에겐 한국어로 보여야 한다.
"name : ○철수"는 사용자에게 친절하지 않다. "이름 : ○철수"로 바꿔야 자연스럽다. 이런 변환을 매 키마다 해주는 게 이번 코드의 임무.
2 중첩 if-else 구조 해부
이 코드의 if-else는 러시아 인형(마트료시카)처럼 안으로 들어가는 구조다. 들여쓰기로 정렬하면 다음 모양.
if ($key == "name") { $title = "이름"; } else { if ($key == "age") { $title = "연령"; } else { if ($key == "tall") { $title = "신장"; } } }
각 단계는 "이게 아니면 다음 거 검사"의 연속이다.
1
$key가 "name"이면$title = "이름" → 그 외 if는 보지 않음
2
아니면 다음 검사: "age"인가?맞으면 $title = "연령"
3
그것도 아니면: "tall"인가?맞으면 $title = "신장"
4
모두 다 아니면?$title은 변경되지 않음 → 직전 회차 값이 그대로 남음 (위험!)
3 동일한 코드를 elseif로 평평하게
같은 동작을 더 읽기 쉽게 다시 쓰면 다음과 같다.
원본 — 중첩 else
들여쓰기가 깊어진다
조건이 늘면 점점 산처럼 됨
가독성↓
조건이 늘면 점점 산처럼 됨
가독성↓
elseif — 평평하게
if / elseif / elseif / else
모든 조건이 한 줄 들여쓰기
같은 동작, 가독성↑
모든 조건이 한 줄 들여쓰기
같은 동작, 가독성↑
if ($key == "name") $title = "이름"; elseif ($key == "age") $title = "연령"; elseif ($key == "tall") $title = "신장";
※
elseif는 한 단어로 붙여 써도 되고 else if로 띄어 써도 된다. 단, 콜론(:) 문법(endif)에서는 반드시 한 단어 elseif여야 함.반응형
4 $title이 갱신되지 않으면?
이 코드의 아킬레스건이다. 만약 $key가 "name·age·tall" 어느 쪽도 아니면 $title은 이전 회차의 값을 그대로 가지게 된다.
// 만약 배열에 "tel" 같은 키가 추가됐다면? $member = ["name" => "○철수", "tel" => "03-…", "age" => 20]; // 1번째: $title = "이름" → "이름 : ○철수" // 2번째: $title은 변경 안 됨 → "이름 : 03-…" ← 잘못된 출력! // 3번째: $title = "연령" → "연령 : 20"
※ 같은 폴더의
continue.php는 이 문제를 else { continue; }로 해결한다. 라벨이 없는 키는 출력 자체를 건너뛰어 사고를 방지.5 더 깔끔한 대안 — 라벨 매핑 배열
if-elseif 체인은 키가 늘어날수록 길어진다. 같은 일을 연관 배열 하나로 처리할 수 있다.
$labels = [ "name" => "이름", "age" => "연령", "tall" => "신장", ]; foreach ($member as $key => $value) { $title = $labels[$key] ?? null; // 없으면 null if ($title === null) continue; // 없으면 건너뜀 print "$title : $value<BR>"; }
※ 이 패턴의 장점
- 조건문이 사라져 가독성↑
- 키-라벨 추가는 배열에 한 줄 추가만 하면 됨
- 중복된 if 체인이 없어 유지보수 쉬움
- 실무에서 가장 흔히 쓰이는 패턴
6 match 식 (PHP 8.0+)
최신 PHP에서는 더 짧게 쓸 수 있다.
$title = match($key) { "name" => "이름", "age" => "연령", "tall" => "신장", default => null, };
| 구문 | 도입 | 특징 |
|---|---|---|
| 중첩 if-else | PHP 시작~ | 전통적, 길어지기 쉬움 |
| elseif 체인 | PHP 시작~ | 평평한 모양, 가독성↑ |
| switch | PHP 시작~ | case마다 break 필요 |
| 라벨 매핑 배열 | 관용 패턴 | 실무 표준 |
match |
PHP 8.0 | 식(expression)으로 값 반환, => 문법 |
7 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| else를 빼먹고 매칭 없는 키 만남 | $title이 직전 값으로 남음 | else { continue; } 또는 default 라벨 |
== 대신 = |
비교가 아닌 대입 → 항상 참 | 비교는 ==, 엄격 비교는 === |
| 중괄호 짝 어긋남 | 구문 오류 또는 의도와 다른 분기 | 들여쓰기로 짝 맞추기 |
| $title 초기화 안 함 | 첫 회차에 매칭 실패 시 undefined 경고 | foreach 진입 전 $title = ""; |
| 중첩이 깊어 가독성 ↓ | 코드 파악·수정 어려움 | elseif 체인 또는 라벨 매핑으로 평탄화 |
8 foreach + if 패턴 정리
이 패턴은 "각 원소에 대해 조건별로 다른 처리"가 필요할 때 무한히 변형된다.
| 응용 | 예 |
|---|---|
| 키로 라벨 변환 | 이번 코드 (name → 이름) |
| 값으로 색상 결정 | 점수 90 이상 → 빨강, 나머지 → 검정 |
| 특정 원소만 출력 | 비공개 글은 건너뜀 (continue) |
| 합계 누적 + 조건 필터 | 30대 회원의 평균 신장 |
| 특정 조건 만나면 중단 | 처음 일치하는 1건만 (break) |
핵심 한 줄 요약
foreach + if원소마다 조건별로 다른 처리를 하는 패턴
$title키마다 다른 라벨을 담을 임시 변수
중첩 elseif 안에 if를 둠 — 가독성↓
elseif 체인같은 동작을 평평하게 — 가독성↑
함정매칭 안 되면 $title이 이전 값으로 남음
라벨 매핑$labels 배열로 깔끔하게 — 실무 표준
match (8.0+)현대 PHP의 가장 짧은 표현식 형태
반응형
'php' 카테고리의 다른 글
| PHP 함수 기본값 매개변수 — 로그인 분기 완전 정리 (0) | 2026.06.13 |
|---|---|
| PHP 함수 매개변수와 변수 스코프 — 전역/지역/삼항 완전 정리 (1) | 2026.06.13 |
| PHP foreach — 연관 배열 key=>value 반복 완전 정리 (1) | 2026.06.13 |
| PHP continue문 — 반복 건너뛰기 완전 정리 (1) | 2026.06.12 |
| PHP break문 — foreach 반복 중단 완전 정리 (0) | 2026.06.12 |
왕진 블로그

댓글