본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP foreach + 중첩 if — 키별 한국어 라벨 변환 완전 정리

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

 

 

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
용어 용어 정리
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의 가장 짧은 표현식 형태
반응형

댓글