반응형
Web Development · PHP for + array
PHP for + 배열 —
인덱스로 배열을 순회하는 고전 패턴
count() · 인덱스 -1 · 후위증가의 정확한 의미
시작 오늘 분석할 코드
한국 행정구역 22개를 일반 배열로 만든 뒤 for로 순회하며 출력하는 코드. "배열 길이를 구해서 인덱스로 접근"하는 가장 전통적인 방식이다.
<?php $PrefectureList = array("서울특별시","부산광역시","대구광역시","울산광역시","광주광역시","대전광역시","인천광역시","세종특별자치시","경기도", "강원도","충청북도","충청남도","경상북도","경상남도","전라북도","전라남도","제주특별자치도","함경북도","함경남도","평안북도","평안남도","황해도"); for($i = 0; $i <= count($PrefectureList) - 1; $i ++){ print $PrefectureList[$i]; print "<BR>"; } ?>
실제 출력 미리보기
서울특별시
부산광역시
대구광역시
울산광역시
광주광역시
대전광역시
인천광역시
세종특별자치시
경기도
강원도
... 황해도까지 총 22줄
부산광역시
대구광역시
울산광역시
광주광역시
대전광역시
인천광역시
세종특별자치시
경기도
강원도
... 황해도까지 총 22줄
용어 용어 정리
array()일반 배열을 만드는 함수
일반 배열0, 1, 2... 정수 인덱스로 접근
count()배열 요소 개수를 반환
$arr[$i]배열의 i번째 요소
인덱스0부터 시작하는 칸 번호
$i ++후위증가 — 사용 후 1 더함
<= n - 1"n - 1까지 포함" = "n번 반복"
<BR>HTML 줄바꿈
1 일반 배열 만들기 —
array(...)여러 값을 하나의 변수로 묶을 때 쓰는 가장 기본 함수. 콤마로 구분된 값들이 차례로 0, 1, 2...번 칸에 저장된다.
$PrefectureList = array("서울특별시","부산광역시", ...); ↓ ↓ [0]번 [1]번 ... // PHP 5.4+ 단축 문법 $PrefectureList = ["서울특별시","부산광역시", ...]; // 두 형태는 완전히 동일
실무에서는
[...] 단축 문법을 더 자주 쓴다. array()는 PHP 4 시절부터의 전통적 형태.2
count() — 배열 길이 구하기배열에 몇 개의 요소가 있는지 알려주는 함수. 본 코드는 22개의 행정구역을 넣었으니 count($PrefectureList)는 22를 반환한다.
count($PrefectureList); // 22 $PrefectureList[0]; // "서울특별시" $PrefectureList[21]; // "황해도" (마지막) $PrefectureList[22]; // 없음 (Notice 발생)
※ 핵심 — "개수"와 "마지막 인덱스"는 1 차이
- 요소 개수: 22개
- 인덱스 범위: 0 ~ 21 (시작이 0이라서)
- 그래서
count() - 1이 "마지막 인덱스"가 된다
3
$i <= count($arr) - 1 의 의미이 부분이 본 코드의 핵심. "인덱스 0부터 마지막 인덱스까지 모두 방문"하기 위한 식이다.
count($PrefectureList) = 22 (요소 개수) count($PrefectureList) - 1 = 21 (마지막 인덱스) $i <= 21 인 동안 반복 → $i = 0, 1, 2, ..., 21 (총 22회)
같은 의도를 더 흔하게 쓰는 두 가지 형태로 표현할 수 있다 — 모두 같은 결과.
본 코드 형태
for($i = 0; $i <= count($arr) - 1; $i++)더 흔한 관용구
for($i = 0; $i < count($arr); $i++)<를 쓰면 -1이 자동으로 사라짐※ 성능 미세 팁:
count($arr)를 매 반복마다 호출하면 매번 다시 계산한다. 큰 배열이라면 $n = count($arr); for($i = 0; $i < $n; $i++)로 한 번만 구하는 게 효율적.반응형
4 인덱스 범위 정밀 분석
| $i 값 | $PrefectureList[$i] | 출력 |
|---|---|---|
| 0 | $PrefectureList[0] | 서울특별시 |
| 1 | $PrefectureList[1] | 부산광역시 |
| ... | ... | ... |
| 21 | $PrefectureList[21] | 황해도 |
| 22 | 22 <= 21? 거짓 | 종료 |
5 같은 결과를 만드는 더 깔끔한 방법 —
foreach이 코드의 의도("배열을 처음부터 끝까지 순회")는 foreach로 쓰면 훨씬 간결하다. 인덱스 자체가 필요 없다면 보통 foreach를 쓴다.
// 본 코드 (for + 인덱스) for($i = 0; $i <= count($PrefectureList) - 1; $i++){ print $PrefectureList[$i]; print "<BR>"; } // 같은 결과 (foreach) foreach($PrefectureList as $value){ print $value; print "<BR>"; } // 인덱스도 같이 필요하면 foreach($PrefectureList as $i => $value){ print "$i. $value<BR>"; }
※ for vs foreach (배열 순회)
- foreach — 배열 처음부터 끝까지 단순 순회 (90%의 경우)
- for — 일정 인덱스 건너뛰기, 두 배열 동시 진행, 거꾸로 순회 등 특수한 경우
6 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
인덱스 범위를 $i <= count($arr)로 씀 |
마지막에 존재하지 않는 인덱스 접근 → Notice | < count() 또는 <= count() - 1 |
| $i 시작값이 1 | 0번 요소 (첫 번째)가 누락 | 일반 배열은 $i = 0부터 |
매 반복마다 count() 호출 |
큰 배열에서 성능 저하 | 외부 변수에 한 번 저장 후 사용 |
연관 배열에 $arr[$i] 시도 |
키가 문자열이라 안 나옴 | 연관 배열에는 foreach 사용 |
| 배열에 hole (빈 인덱스)이 있을 때 | 중간에 Notice 발생 | foreach 또는 array_values()로 재정렬 |
7 for의 동작 단계 정리
[ array() 호출 → 22개 요소 배열 생성 ] ↓ [ $i = 0 (초기값) ] ↓ [ 0 <= 21? → 참 ] → print $arr[0] = "서울특별시" ↓ [ $i = 1 (증가식) ] ↓ [ 1 <= 21? → 참 ] → print $arr[1] = "부산광역시" ↓ ... ↓ [ 21 <= 21? → 참 ] → print $arr[21] = "황해도" ↓ [ $i = 22 ] ↓ [ 22 <= 21? → 거짓 ] → 종료
핵심 한 줄 요약
array()일반 배열 생성 — 0번부터 인덱싱
count()배열 요소 개수 (인덱스 아님!)
count() - 1마지막 인덱스 (개수보다 1 작음)
< count()"미만" — 더 흔한 관용구
$arr[$i]i번째 요소 접근
foreach단순 순회는 더 깔끔한 대안
성능count()는 루프 밖에서 한 번만 호출 권장
반응형
'php' 카테고리의 다른 글
| PHP switch 조건문 — case/break/default 완전 정리 (1) | 2026.06.12 |
|---|---|
| PHP로 SELECT 옵션 동적 생성 — 배열 → HTML 만들기 완전 정리 (0) | 2026.06.12 |
| PHP 중첩 if-else — type 분기로 배우는 다중 분기 완전 정리 (0) | 2026.06.12 |
| PHP if-else — 로그인 성공/실패 분기 처리 완전 정리 (0) | 2026.06.12 |
| PHP if 조건문 — 로그인 검증 예제로 배우는 && 연산자 (0) | 2026.06.12 |
왕진 블로그

댓글