반응형
Web Development · PHP explode
PHP explode —
구분자로 문자열 자르기 → 배열
"사과,귤,감,밤" 같은 CSV형 문자열을 ['사과', '귤', '감', '밤']로 분해
시작 오늘 분석할 코드
한 문자열에 콤마로 묶여 있는 여러 값을 각각 분리해서 배열의 원소로 만드는 코드. print_r로 결과 배열의 내부 구조까지 확인한다.
<?php $string = "사과,귤,감,밤"; $array = explode(',', $string); // "," 구분자로 일반 문자열을 배열로 변환 print "<PRE>"; print_r($array); print "</PRE>"; ?>
실제 출력 결과
Array ( [0] => 사과 [1] => 귤 [2] => 감 [3] => 밤 )
용어 용어 정리
explode()구분자를 기준으로 문자열을 잘라 배열로 만드는 함수
구분자 (delimiter)자를 위치를 알려주는 기준 문자(열)
CSV콤마로 값들을 구분한 텍스트 형식
print_r()배열·객체 구조를 사람이 읽기 쉽게 출력
<PRE>공백·줄바꿈을 그대로 보존하는 HTML 태그
implode()반대 함수 — 배열을 문자열로 합침
숫자 인덱스 배열0부터 시작하는 키를 가진 일반 배열
var_dump()print_r보다 더 자세한 디버그 출력
1 explode가 필요한 상황
한 문자열 안에 여러 값이 묶여 들어오는 형태는 웹·DB·파일 어디서나 흔하다.
예시 시나리오
· CSV 파일의 한 줄:
· URL 경로:
· 태그 입력:
· 날짜:
· CSV 파일의 한 줄:
"이름,나이,주소" → 3개 칸으로 분리· URL 경로:
"/products/123/reviews" → 부위별로 분해· 태그 입력:
"php, web, mysql" → 태그 배열· 날짜:
"2026-05-02" → [2026, 05, 02]2 explode 문법
explode(구분자, 원본_문자열) // ↑ ↑ // string string
| 매개변수 | 이 코드 | 의미 |
|---|---|---|
| 구분자 | ',' |
이 문자가 나오는 위치마다 자름 |
| 원본 문자열 | "사과,귤,감,밤" |
자를 대상 |
| (선택) 최대 개수 | 생략 | 몇 조각까지만 자를지 |
※ 매개변수 순서 주의: 구분자가 먼저, 문자열이 나중. 다른 언어(예: 자바스크립트의
split)와 반대다.3 결과 배열의 구조
"사과,귤,감,밤" └─┘ └┘ └┘ └┘ [0] [1][2][3] ← 자른 조각이 0번부터 차례로 들어감 결과: ["사과", "귤", "감", "밤"] index 0 1 2 3
구분자(콤마) 자체는 결과에 포함되지 않는다. 각 조각만 깨끗하게 분리된다.
반응형
4 print_r() vs print() vs var_dump()
일반 print($array)는 배열을 못 다룬다 — "Array"라는 글자만 출력한다. 배열 내용을 보려면 print_r이나 var_dump를 쓴다.
| 함수 | 출력 형태 | 용도 |
|---|---|---|
print($a) |
"Array" 만 | 배열 직접 출력 X |
print_r($a) |
키 => 값 보기 좋게 | 일반적인 배열 확인 |
var_dump($a) |
타입·길이까지 자세히 | 디버깅 (string(3), int(20) 등) |
print_r($a, true) |
출력 대신 문자열 반환 | 로그 파일에 기록할 때 |
5 왜 <PRE>로 감싸는가?
HTML은 기본적으로 여러 공백·줄바꿈을 한 칸으로 합쳐 표시한다. print_r의 출력은 공백·줄바꿈으로 정렬돼 있는데, 그냥 출력하면 한 줄로 다 붙어 보인다.
<PRE> 없이
Array ( [0] => 사과 [1] => 귤 [2] => 감 [3] => 밤 )한 줄에 다 붙음
<PRE> 안에
줄바꿈 보존 → 보기 좋게 정렬
코드처럼 모노스페이스 폰트로
코드처럼 모노스페이스 폰트로
6 단계별 추적
1
$string = "사과,귤,감,밤"11바이트(한글 1자=3B 기준) 짜리 문자열
2
explode(',', $string)콤마 위치(3곳)에서 자름
3
4조각 생성"사과", "귤", "감", "밤"
4
$array = [0=>"사과", 1=>"귤", 2=>"감", 3=>"밤"]0번부터 차례로 인덱스 부여
5
print "<PRE>"HTML 모노스페이스 영역 시작
6
print_r($array)"Array ( [0] => 사과 ... )" 형태로 출력
7
print "</PRE>"영역 종료
7 다양한 사용 예
// CSV 줄 파싱 explode(',', "kim,30,seoul") // → ["kim", "30", "seoul"] // URL 경로 분해 explode('/', "/products/123/reviews") // → ["", "products", "123", "reviews"] ← 첫 빈 칸 주의 // 줄바꿈으로 자르기 explode("\n", $multilineText) // → 줄별로 배열 원소 // 최대 개수 지정 explode(',', "a,b,c,d,e", 3) // → ["a", "b", "c,d,e"] ← 마지막은 합쳐짐 // 음수 (뒤에서 N개 제외) explode(',', "a,b,c,d", -1) // → ["a", "b", "c"] ← 마지막 1개 버림
8 implode와 짝
explode의 반대는 implode(또는 별칭 join). 배열을 다시 한 문자열로 합친다.
$arr = ["사과", "귤", "감", "밤"]; $str = implode(',', $arr); // "사과,귤,감,밤" (다시 원래대로)
9 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 매개변수 순서 (문자열, 구분자) | 의도와 다른 동작 | explode(구분자, 문자열) |
| 구분자가 빈 문자 '' | 경고 + false 반환 | 최소 1글자 이상 |
| 한 글자씩 자르고 싶음 | explode로는 불가 | str_split($s) 사용 |
| 구분자 여럿 처리 | 한 종류만 가능 | preg_split('/[,;]/', $s) |
| print($array) 했더니 "Array"만 | print는 배열 직접 X | print_r 또는 var_dump |
| <PRE> 없이 print_r 결과가 안 보임 | 한 줄에 다 붙어 표시됨 | HTML 출력 시엔 <pre> 안에 |
10 한 단계 발전 — 정규식 기반
구분자가 여러 종류이거나 패턴일 때는 preg_split을 쓴다.
// 콤마 또는 세미콜론으로 자르기 preg_split('/[,;]/', "a,b;c,d"); // ["a", "b", "c", "d"] // 여러 공백을 한 칸으로 자르기 preg_split('/\s+/', "hello world foo"); // ["hello", "world", "foo"]
핵심 한 줄 요약
explode()구분자 기준으로 문자열을 배열로 자르는 함수
매개변수 순서explode(구분자, 원본) — 다른 언어와 반대 주의
결과0번부터 차례로 인덱스 부여된 일반 배열
구분자 자체결과에 포함되지 않음
print_r배열 내용을 키=>값 형식으로 보기 좋게 출력
<PRE>HTML에서 줄바꿈·공백 보존
반대implode — 배열을 문자열로 합침
반응형
'php' 카테고리의 다른 글
| PHP nl2br — 줄바꿈을 <br>태그로 완전 정리 (0) | 2026.06.14 |
|---|---|
| PHP implode — 배열을 구분자로 합쳐 문자열로 변환 완전 정리 (0) | 2026.06.14 |
| PHP addslashes — 따옴표 이스케이프 완전 정리 (0) | 2026.06.14 |
| PHP static 변수 — 호출 사이에 값을 기억시키는 누적 카운터 완전 정리 (0) | 2026.06.14 |
| PHP 지역 변수 — static 없을 때의 함정 완전 정리 (0) | 2026.06.14 |
왕진 블로그

댓글