반응형
Web Development · PHP 배열 함수
PHP list() — 배열을 여러 변수에 한 번에 분해 할당
인덱스 기반 분해 · PHP 7.1+ 단축 문법 · 키 지정 분해 완전 정리
시작 오늘 분석할 코드
list()는 배열 값을 여러 변수에 한 번에 분해 할당하는 언어 구조입니다. 배열의 각 요소를 개별 변수로 받을 때 일일이 인덱스를 지정하는 대신 한 줄로 처리할 수 있습니다. PHP 7.1부터는 [] 단축 문법으로도 사용 가능합니다.
<?php $data = array("사과", "귤", "감"); // list()로 배열 분해 할당 list($fruit0, $fruit1, $fruit2) = $data; // 위와 동일한 의미: // $fruit0 = $data[0]; // "사과" // $fruit1 = $data[1]; // "귤" // $fruit2 = $data[2]; // "감" print $fruit0; // 사과 print "<br>"; print $fruit1; // 귤 print "<br>"; print $fruit2; // 감 ?>
실제 출력 미리보기
배열 $data
[0] → "사과"
[1] → "귤"
[2] → "감"
[1] → "귤"
[2] → "감"
→
분해 후 변수
$fruit0 = "사과"
$fruit1 = "귤"
$fruit2 = "감"
$fruit1 = "귤"
$fruit2 = "감"
→
출력
사과
귤
감
귤
감
용어 용어 정리
list()배열 요소를 여러 변수에 한 번에 분해 할당하는 언어 구조 (함수처럼 보이지만 함수 아님)
배열 분해배열의 각 요소를 개별 변수로 꺼내는 것. 구조 분해 할당이라고도 함
인덱스 기반list()는 배열의 숫자 인덱스(0, 1, 2…)를 기준으로 분해
단축 문법 []PHP 7.1+에서 list() 대신 [] 를 사용하는 더 간결한 표기법
일부 생략list($a, , $c)처럼 중간 요소를 빈칸으로 건너뛸 수 있음
키 지정PHP 7.1+에서 list("키" => $var) 형태로 연관 배열도 분해 가능
swap 패턴list($a, $b) = [$b, $a] 로 임시 변수 없이 두 변수 값을 교환
중첩 분해list(list($a, $b), $c) 형태로 다차원 배열도 한 번에 분해 가능
1 왜 list()가 필요한가 — 인덱스 반복의 불편함
인덱스 숫자를 일일이 쓰지 않아도 되는 이유
배열에서 여러 값을 꺼낼 때 $data[0], $data[1], $data[2]처럼 반복하면 코드가 길어지고 인덱스 숫자를 잘못 쓰기 쉽습니다. list()는 이를 한 줄로 표현하면서 각 요소에 의미 있는 이름을 부여할 수 있습니다.
인덱스 직접 접근 (반복)
$fruit0 = $data[0];
$fruit1 = $data[1];
$fruit2 = $data[2];
3줄, 인덱스 실수 위험
$fruit1 = $data[1];
$fruit2 = $data[2];
3줄, 인덱스 실수 위험
list() 분해 할당 (한 줄)
list($fruit0, $fruit1,
$fruit2) = $data;
1줄, 의미 명확
$fruit2) = $data;
1줄, 의미 명확
※ list()는 외관상 함수처럼 보이지만 실제로는 PHP 언어 구조(language construct)입니다. 반환값이 있고 변수에 직접 참조를 할당합니다.
2 PHP 7.1+ 단축 문법 [] — 더 현대적인 표기
list() 대신 [] 를 쓰면 더 간결해짐
PHP 7.1부터는 list() 대신 []를 사용한 구조 분해 할당이 가능합니다. JavaScript의 배열 구조 분해와 비슷한 문법입니다. 신규 코드에서는 []를 사용하는 것이 더 권장됩니다.
// PHP 5.x 방식 list($fruit0, $fruit1, $fruit2) = $data; // PHP 7.1+ 단축 문법 — 동일한 동작 [$fruit0, $fruit1, $fruit2] = $data; // foreach에서도 사용 가능 (PHP 7.1+) $rows = [["홍길동", 25], ["김영희", 30]]; foreach ($rows as [$name, $age]) { echo "$name: $age세\n"; }
3 요소 건너뛰기 — 필요한 것만 가져오기
빈칸으로 중간 요소를 무시할 수 있음
배열의 일부 요소만 필요할 때 list() 안에서 해당 위치를 비워두면 그 요소는 무시됩니다. 모든 요소를 변수에 받을 필요가 없을 때 유용합니다.
$data = ["사과", "귤", "감"]; // 첫 번째와 세 번째만 필요할 때 list($first, , $third) = $data; echo $first; // 사과 echo $third; // 감 (귤은 무시됨) // 단축 문법으로도 동일 [$first, , $third] = $data;
반응형
4 두 변수 값 교환 (swap) — 임시 변수 없이
list()의 대표적인 실전 활용 패턴
두 변수의 값을 교환할 때 보통 임시 변수가 필요합니다. list()와 배열 리터럴을 조합하면 임시 변수 없이 한 줄로 swap이 가능합니다.
$a = "사과"; $b = "귤"; // 임시 변수 방식 (전통적) $tmp = $a; $a = $b; $b = $tmp; // list() 방식 — 한 줄로 swap list($a, $b) = [$b, $a]; echo $a; // 귤 echo $b; // 사과
※ PHP 7.1+ 단축 문법:
[$a, $b] = [$b, $a]; 로도 동일하게 swap 가능합니다.5 연관 배열 분해 (PHP 7.1+)
키 이름으로 원하는 값만 골라서 분해
PHP 7.1부터 list()에서 키를 지정해 연관 배열의 특정 값만 꺼낼 수 있습니다. 순서와 관계없이 키 이름으로 접근하므로 훨씬 명확합니다.
$person = ["name" => "홍길동", "age" => 25, "city" => "서울"]; // PHP 7.1+ 키 지정 분해 ["name" => $name, "age" => $age] = $person; echo "$name 님은 $age 세입니다."; // 홍길동 님은 25 세입니다. // DB 결과에서 필요한 컬럼만 꺼낼 때 유용 ["name" => $name, "city" => $city] = $person; // age는 무시, name과 city만 추출
6 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 연관 배열에 list() 사용 (PHP 5.x) | 숫자 인덱스 기준이라 원하는 키 값을 못 가져옴 | PHP 7.1+ 키 지정 문법 사용 또는 수동 할당 |
| 배열보다 변수 수가 많음 | 초과 변수에 null이 할당됨 — 잠재적 버그 | 배열 요소 수와 list 변수 수를 맞춤 |
| 문자열을 list()에 사용 | TypeError — 배열이 아님 | list()는 배열(array)에만 사용 가능 |
| PHP 5.x에서 [] 단축 문법 사용 | Parse error | PHP 7.1+ 환경 확인 후 사용, 구버전은 list() 사용 |
| swap 시 순서 착각 | [$a, $b] = [$a, $b] — 교환 안 됨 | [$a, $b] = [$b, $a] 로 우변 순서를 반전 |
핵심 한 줄 요약
list($a, $b) = $arr배열 값을 여러 변수에 한 번에 분해 할당
단축 문법 (PHP 7.1+)[$a, $b] = $arr 로 더 간결하게 표현
요소 건너뛰기list($a, , $c) — 빈칸으로 중간 요소 무시
swap 패턴[$a, $b] = [$b, $a] — 임시 변수 없이 값 교환
키 지정 분해["키" => $var] = $assoc — 연관 배열도 분해 가능 (PHP 7.1+)
Tags
#PHP #list함수 #배열분해 #배열할당 #구조분해 #단축문법 #PHP배열함수 #PHP함수 #PHP학습 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, list함수, 배열분해, 배열할당, 구조분해, 단축문법, PHP배열함수, PHP함수, PHP학습, 웹개발, 티스토리
반응형
'php' 카테고리의 다른 글
| PHP strip_tags() — HTML 태그 제거 · 허용 태그 지정 · XSS 방어 완전 정리 (0) | 2026.07.10 |
|---|---|
| PHP mb_strlen() — 한글 글자 수 정확히 세기 · strlen과 차이 완전 정리 (0) | 2026.07.10 |
| PHP htmlspecialchars() — XSS 방어 · HTML 특수문자 이스케이프 완전 정리 (0) | 2026.07.10 |
| PHP array_unshift() — 배열 맨 앞에 요소 추가 · 재인덱싱 · push/shift 비교 완전 정리 (0) | 2026.07.10 |
| PHP array_reverse() — 배열 순서 뒤집기 · preserve_keys 옵션 완전 정리 (0) | 2026.07.10 |
왕진 블로그

댓글