본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP foreach — 연관 배열 key=>value 반복 완전 정리

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

 

 

Web Development · PHP foreach

PHP foreach —
연관 배열의 key와 value를 한 번에 꺼내기

$arr as $key => $value 형식의 의미와 흐름
시작 오늘 분석할 코드

회원 정보를 담은 연관 배열(이름·연령·신장)을 foreach로 한 번씩 훑으면서 키와 값을 함께 출력하는 가장 기본적인 패턴이다.

<?php $member = array("name" => "○철수", "age" => 20, "tall" => 170); // member변수에 연관배열을 할당 foreach($member as $key => $value){ // foreach는 특정 배열의 값을 지역변수에 저장하고 그것을 사용하게 한다 // member배열에서 key와 value를 분리한다 // key는 name, value는 ○철수 print "$key : $value"; // 키와 값을 출력 print "<BR>"; } ?>
실제 출력 결과
name : ○철수
age : 20
tall : 170
용어 용어 정리
연관 배열"키 => 값" 쌍으로 저장된 배열
array()배열을 만드는 함수 — 짧게 [ ] 도 가능
=>"이 키에 이 값을 매핑"이라는 화살표
foreach배열 원소를 하나씩 꺼내 반복
as"~을 ~으로 받겠다"는 키워드
$key현재 원소의 키를 받는 임시 변수명 (자유)
$value현재 원소의 값을 받는 임시 변수명 (자유)
"$var"큰따옴표 안에서 변수가 자동 치환됨

1 연관 배열이란?

일반 배열은 0, 1, 2… 같은 숫자 인덱스로 값에 접근한다. 하지만 회원 정보처럼 "이름은 누구, 연령은 몇" 같은 의미가 분명한 데이터는 이름표(key)로 접근하는 게 자연스럽다.

일반 배열
$a[0] = "○철수";
$a[1] = 20;
$a[2] = 170;
→ 0이 무엇이지? 알 수 없음
연관 배열
"name" => "○철수"
"age" => 20
"tall" => 170
→ 키만 보면 의미가 분명
JSON·DB의 한 행·HTTP 폼 데이터 — 모두 연관 배열 구조와 닮아 있다. PHP에서 데이터를 다룰 때 가장 많이 만나는 형태.

2 array() 문법 — 키와 값 묶기
$member = array( "name" => "○철수", "age" => 20, "tall" => 170 );
요소 역할
"name" 키 (key) — 이름표 문자열, 숫자 모두 가능
=> "이 키에 이 값을 짝짓는다" 화살표 모양 연산자
"○철수" 값 (value) — 실제 데이터 문자열·숫자·배열·객체 모두 가능
, 다음 쌍으로 구분 마지막은 생략 가능
※ PHP 5.4+ 짧은 문법
  • 요즘은 array(...) 대신 대괄호 [...]가 표준
  • $member = ["name" => "○철수", "age" => 20];
  • 동작은 동일, 단지 더 짧고 가독성↑

3 foreach 문법 — as $key => $value

foreach는 PHP에서 배열을 순회할 때 가장 많이 쓰는 반복문이다.

foreach ($배열 as $키 => $값) { // 매 회차마다 $키와 $값에 한 쌍씩 대입됨 }

이 코드를 한국어로 풀면: "$member 배열을 한 원소씩 가져와서, 그 키는 $key에, 값은 $value에 담아서, 블록 안에서 사용."

$key, $value는 이름이 자유다. foreach($member as $k => $v)도 OK, foreach($member as $name => $info)도 OK. 단지 의미를 분명히 하려고 보통 $key/$value를 쓴다.

4 매 회차에 일어나는 일
1
1번째 회차$key = "name", $value = "○철수" → "name : ○철수<BR>" 출력
2
2번째 회차$key = "age", $value = 20 → "age : 20<BR>" 출력
3
3번째 회차$key = "tall", $value = 170 → "tall : 170<BR>" 출력
4
배열 끝 도달 → foreach 종료다음 코드(있다면)로 진행
※ foreach는 배열에 들어 있는 순서대로 꺼낸다 (PHP는 연관 배열도 삽입 순서를 기억함). 수학적 정렬이 아니다.

반응형
5 $key 생략 — value만 필요한 경우

키가 필요 없으면 더 짧게 쓸 수 있다.

키 + 값
foreach ($arr as $k => $v)
$k에 키, $v에 값
→ 키와 값 모두 사용
값만
foreach ($arr as $v)
$v에 값만
→ 키가 필요 없을 때
// 값만 필요할 때 foreach ($member as $value) { print "$value<BR>"; } // 결과: ○철수, 20, 170

6 "$key : $value" — 큰따옴표의 마법

PHP의 큰따옴표 문자열 안에 $변수를 적으면, 출력 시 자동으로 그 값으로 치환된다.

$key = "name"; $value = "○철수"; print "$key : $value"; → name : ○철수 print '$key : $value'; → $key : $value (그대로) print $key . " : " . $value; → name : ○철수 (점 연산자로 결합)
방식 변수 치환 특징
큰따옴표 "…" 가장 짧고 직관적
작은따옴표 '…' 안 됨 변수를 글자 그대로 보여주고 싶을 때
점 결합 . 됨 (별도 연산) 긴 문자열·복잡한 식에서 명확

7 자주 하는 실수
실수 증상 해결
=> 대신 = 구문 오류 키-값 묶을 땐 =>
foreach 안에서 => 빼먹음 $key가 값을 받음 → 의도와 다름 as $key => $value 형식 지키기
작은따옴표로 '$key' 치환 안 되고 글자 그대로 출력 변수 치환은 큰따옴표
foreach 안에서 배열 자체 변경 예측 불가능한 결과 변경하려면 참조 &$value 사용
키 충돌 (같은 키 두 번 등록) 나중 값이 앞 값을 덮어씀 키는 유일해야 함

8 알아두면 좋은 — 참조로 받기

foreach 안에서 배열 원소를 직접 수정하고 싶을 때는 &를 붙여 참조로 받는다.

$nums = [1, 2, 3]; foreach ($nums as &$v) { $v = $v * 10; // 원본 배열을 직접 수정 } unset($v); // 안전하게 참조 끊기 print_r($nums); // [10, 20, 30]
※ 참조 사용 후엔 unset($v)로 명시적으로 끊어줘야 한다. 안 그러면 다음 코드에서 $v가 마지막 원소를 참조한 상태로 남아 미묘한 버그가 생긴다.

핵심 한 줄 요약

연관 배열"key => value" 쌍으로 저장된 배열
array()배열 생성 함수 — 짧게는 [ ] 도 가능
=>키와 값을 묶는 화살표
foreach … as배열 원소를 한 번씩 꺼내 반복
as $k => $v키와 값을 동시에 받는 형식
"$var"큰따옴표 안에서 변수 자동 치환
참조 &$v배열 원소를 직접 수정할 때 (unset 필수)
반응형

댓글