본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP foreach 반복문 — 배열 순회 전용 완전 정리

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

 

 

Web Development · PHP foreach

PHP foreach 반복문 —
배열을 한 칸씩 꺼내 쓰는 가장 깔끔한 방법

인덱스를 신경 쓰지 않고 배열 요소 하나씩 처리
시작 오늘 분석할 코드

foreach는 배열 전용 반복문이다. for처럼 인덱스($i = 0; $i < count(...))를 만들 필요 없이, "배열에서 한 개씩 꺼내서 변수에 넣어줘"라는 의도를 그대로 코드로 쓴다.

<?php $week = array("월","화","수","목","금","토","일"); // week일반 배열변수에 배열을 월~일까지 저장하고, foreach($week as $value){ // week변수의 내용을 한개씩 value변수에 넣고 반복문을 실행하는데, // 더 이상 꺼낼 데이터가 없다면 반복문을 종료함. print $value; print "<BR>"; } ?>
실제 출력 미리보기






용어 용어 정리
array()배열을 만드는 함수 (PHP 5.4+ 부터는 [...] 도 가능)
foreach배열 요소를 하나씩 꺼내는 반복문
as"이 배열을 → 이 변수로" 연결 키워드
$week순회할 대상 배열
$value매 반복마다 한 요소가 담기는 변수
일반 배열0, 1, 2... 숫자 인덱스 배열
연관 배열키-값 쌍 배열 (key => value)
<BR>HTML 줄바꿈

1 foreach의 기본 문법
두 가지 형태가 있다
값만 받기
foreach($배열 as $값)

본 코드의 형태. 값(value)만 필요할 때.
키 + 값 받기
foreach($배열 as $키 => $값)

인덱스나 연관배열 키도 같이 필요할 때.
// 본 코드 (값만) foreach($week as $value){ print $value; // 월, 화, 수, ... } // 인덱스도 받기 foreach($week as $key => $value){ print "$key : $value"; // 0 : 월, 1 : 화, ... }

2 foreach가 배열을 도는 흐름
$week = ["월","화","수","목","금","토","일"] ↓ 1회차 $value ← "월" → print "월" ↓ 2회차 $value ← "화" → print "화" ↓ 3회차 $value ← "수" → print "수" ↓ ... $value ← "일" → print "일" ↓ 더 이상 없음 → 종료
※ foreach가 알아서 해주는 일
  • 인덱스 변수($i) 만들 필요 없음
  • 배열 길이(count()) 직접 구할 필요 없음
  • "끝까지 돌았는지" 확인할 필요 없음 — 자동 종료

반응형
3 for vs foreach — 같은 결과, 다른 코드

같은 출력을 for로 쓰면 코드가 길어지고, 인덱스를 직접 다뤄야 한다. "배열을 처음부터 끝까지 다 돌고 싶다"가 의도라면 foreach가 명확하다.

for로 작성
for($i = 0; $i < count($week); $i++) {
  print $week[$i];
}
foreach로 작성
foreach($week as $value) {
  print $value;
}
실무에서 배열 순회는 거의 99% foreach를 쓴다. 인덱스가 꼭 필요한 경우(이전 요소와 비교, 일정 인덱스 건너뛰기)에만 for.

4 일반 배열 vs 연관 배열에서의 foreach

foreach는 두 가지 배열 모두에 똑같이 동작한다. 일반 배열은 키가 0, 1, 2..., 연관 배열은 문자열 키.

// 일반 배열 (본 코드) $week = ["월","화","수"]; foreach($week as $key => $value){ print "$key : $value"; } // 출력: 0 : 월, 1 : 화, 2 : 수 // 연관 배열 $user = ["name" => "kim", "age" => 20]; foreach($user as $key => $value){ print "$key : $value"; } // 출력: name : kim, age : 20

5 동작 단계별로 다시 보기
1
$week 배열 생성array() 함수로 7개 요소를 가진 배열을 만들어 $week에 저장
2
foreach 진입$week의 첫 요소부터 차례대로 꺼낼 준비
3
반복 1회차$value에 "월" 할당 → print "월" → print "<BR>"
4
반복 2~7회차$value에 "화"~"일" 차례로 할당하며 같은 동작 반복
5
배열 끝더 꺼낼 요소가 없으면 자동 종료

6 자주 하는 실수
실수 증상 해결
foreach($week, $value) Parse error 구분자는 as 키워드 (콤마 아님)
안에서 $week을 직접 수정 예측 불가능한 결과 참조 &$value로 수정하거나 별도 결과 배열 사용
변수 자체를 못 찾음 (배열이 NULL) Warning: Invalid argument foreach 전에 배열 존재 확인 (is_array())
$key 없이 인덱스 출력 시도 인덱스가 안 나옴 foreach($arr as $key => $value) 형태 사용
foreach 끝나도 $value 남아 있음 다음 코드에서 마지막 값이 잔존 참조 사용 후엔 unset($value) 권장

7 한 발 더 — 참조로 받아 배열 수정하기

foreach($배열 as &$value)처럼 앰퍼샌드(&)를 붙이면 $value가 원본 요소를 가리키는 참조가 된다. 그래서 $value를 바꾸면 원본 배열도 바뀐다.

$nums = [1, 2, 3]; foreach($nums as &$n){ $n = $n * 10; // 참조이므로 원본을 직접 수정 } unset($n); // 사용 후 해제 권장 print_r($nums); // [10, 20, 30]
※ 참조 사용 후 unset($value)를 안 하면, 다음 코드에서 마지막 요소를 가리키는 참조가 살아 있어 예상치 못한 동작을 한다.

핵심 한 줄 요약

foreach배열을 처음부터 끝까지 한 칸씩 꺼내는 반복문
as"배열을 → 변수로" 연결하는 키워드
$value매 반복마다 한 요소가 담기는 변수
$key => $value키와 값을 동시에 받기
자동 종료배열 끝까지 가면 알아서 멈춤
vs for배열 순회는 foreach가 더 간결·안전
&$value참조로 받으면 원본 배열을 수정 가능
반응형

댓글