반응형
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참조로 받으면 원본 배열을 수정 가능
반응형
'php' 카테고리의 다른 글
| PHP if-else — 로그인 성공/실패 분기 처리 완전 정리 (0) | 2026.06.12 |
|---|---|
| PHP if 조건문 — 로그인 검증 예제로 배우는 && 연산자 (0) | 2026.06.12 |
| PHP for 반복문 — 초기값·조건·증가식 3박자 완전 정리 (0) | 2026.06.12 |
| PHP do-while 반복문 — 최소 1회 실행 보장 완전 정리 (0) | 2026.06.12 |
| XML 외부 CSS — block 레벨, 사용자 정의 태그 완전 정리 (0) | 2026.06.11 |
왕진 블로그

댓글