본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP for + count() — 배열 길이만큼 반복하는 패턴 완전 정리

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

 

 

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줄
용어 용어 정리
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()는 루프 밖에서 한 번만 호출 권장
반응형

댓글