시작 오늘 분석할 코드
array_unshift()는 배열 맨 앞에 하나 이상의 요소를 추가하는 함수입니다. 기존 요소들은 밀려나고 인덱스가 재설정됩니다. array_push()가 배열 끝에 추가한다면, array_unshift()는 배열 시작에 추가합니다.
<?php $data = array("사과", "귤", "감"); // 현재: [0=>"사과", 1=>"귤", 2=>"감"] array_unshift($data, "파파야", "키위"); // 배열 맨 앞으로 "파파야", "키위"를 추가 // 기존 요소는 뒤로 밀리고 인덱스 재설정 print "<PRE>"; print_r($data); print "</PRE>"; ?>
실제 출력 미리보기
← 앞에 추가된 파파야·키위 / 기존 요소는 인덱스 2부터 시작
용어 용어 정리
array_unshift()배열 맨 앞에 하나 이상의 요소를 추가. 원본 배열을 직접 수정 (인플레이스)
재인덱싱새 요소가 앞에 추가되면 기존 숫자 키가 모두 밀려서 0부터 다시 번호 매겨짐
인플레이스함수가 배열 자체를 수정. array_push와 array_unshift 모두 원본을 바꿈
반환값추가 후 배열의 전체 요소 수(count)를 반환. 새 배열을 반환하는 것이 아님
array_push()배열 맨 뒤에 요소 추가. unshift의 반대 방향. 인덱스는 자동으로 이어짐
array_shift()배열 맨 앞에서 요소를 꺼냄(제거 + 반환). unshift의 반대 동작
array_pop()배열 맨 뒤에서 요소를 꺼냄(제거 + 반환). push의 반대 동작
큐(Queue)선입선출(FIFO) 구조. unshift(앞추가)+pop(뒤제거) 또는 push(뒤추가)+shift(앞제거)
1 기본 동작 — 왜 기존 인덱스가 전부 바뀌는가?
앞에 추가하면 모든 기존 요소가 뒤로 밀려 재번호
array_unshift()는 새 요소를 배열 앞에 삽입하므로 기존 모든 요소가 뒤로 밀립니다. 이때 PHP는 숫자 키를 0부터 다시 연속으로 부여합니다. "파파야"와 "키위"가 [0], [1]을 차지하면, 기존 "사과"는 [0]에서 [2]로 밀립니다.
$data = ["사과", "귤", "감"]; // 인덱스: 0=사과, 1=귤, 2=감 array_unshift($data, "파파야", "키위"); // 인덱스: 0=파파야, 1=키위, 2=사과, 3=귤, 4=감 // 기존 0번 사과가 2번으로 밀림 print_r($data); // 원본 $data가 직접 수정됨
⚠️ array_unshift()는 원본 배열을 직접 수정합니다. array_merge()처럼 새 배열을 반환하는 것이 아닙니다. 이 차이를 꼭 기억하세요.
2 반환값의 의미 — 왜 배열이 아니라 숫자를 반환하는가?
반환값은 추가 후 배열의 총 요소 수
array_unshift()의 반환값은 추가 작업 후 배열의 전체 요소 개수(int)입니다. 새 배열이 아닙니다. 이미 원본 배열을 수정했기 때문에 별도로 배열을 반환할 필요가 없습니다.
$data = ["사과", "귤", "감"]; // 기존 요소 3개 $count = array_unshift($data, "파파야", "키위"); echo $count; // 5 (3 + 2개 추가) // $data 자체에 결과가 들어 있음 print_r($data); // ["파파야", "키위", "사과", "귤", "감"]
※ 반환값을 꼭 받을 필요는 없습니다. 단순히 추가하려면 array_unshift($data, "값");만으로 충분합니다.
3 4방향 비교 — push / pop / shift / unshift
배열 앞뒤에 넣고 빼는 4가지 함수
PHP에는 배열의 앞뒤에서 요소를 추가/제거하는 4가지 함수가 있습니다. 이 4개를 함께 이해하면 큐(Queue)·스택(Stack) 구조를 쉽게 구현할 수 있습니다.
| 함수 |
위치 |
동작 |
반환값 |
array_push($a, $v) |
배열 끝 |
요소 추가 |
새 요소 수 |
array_pop($a) |
배열 끝 |
요소 제거 |
제거된 값 |
array_unshift($a, $v) |
배열 앞 |
요소 추가 + 재인덱싱 |
새 요소 수 |
array_shift($a) |
배열 앞 |
요소 제거 + 재인덱싱 |
제거된 값 |
스택 (LIFO) 구현
push(끝에 추가)
pop(끝에서 꺼내기)
마지막에 넣은 것을
먼저 꺼내는 구조
큐 (FIFO) 구현
push(끝에 추가)
shift(앞에서 꺼내기)
먼저 넣은 것을
먼저 꺼내는 구조
4 여러 요소 한 번에 추가 — 순서에 주의
인수 순서 그대로 앞에 삽입됨
array_unshift()에 여러 값을 인수로 넘기면, 인수 순서 그대로 배열 앞에 삽입됩니다. "파파야"를 먼저, "키위"를 나중에 넘기면 [0]=파파야, [1]=키위 순으로 들어갑니다. 순서가 뒤집히지 않습니다.
array_unshift($data, "파파야", "키위"); // → [파파야, 키위, 사과, 귤, 감] // 인수 순서 그대로 앞에 삽입 // 한 번에 여러 개 vs 반복 unshift — 결과 차이! array_unshift($data, "키위"); array_unshift($data, "파파야"); // → [파파야, 키위, 사과, 귤, 감] // 두 번 호출도 같은 결과 (두 번째 unshift가 앞으로)
※ 여러 번 unshift를 반복하면 마지막에 추가한 값이 가장 앞에 오게 됩니다. 원하는 순서로 한 번에 넘기는 것이 더 명확합니다.
5 연관 배열에서의 동작
문자열 키는 보존, 숫자 키만 재인덱싱
연관 배열(문자열 키)에 array_unshift()를 사용하면 새 요소는 숫자 키(0부터)를 갖고 앞에 추가됩니다. 기존 문자열 키-값 쌍은 순서가 바뀌지만 키 자체는 유지됩니다.
$data = ["apple" => "사과", "grape" => "포도"]; array_unshift($data, "신상품"); print_r($data); // Array // ( // [0] => 신상품 ← 숫자 키로 앞에 추가 // [apple] => 사과 ← 문자열 키 보존 // [grape] => 포도 // )
6 자주 하는 실수
| 실수 |
증상 |
해결 |
| 반환값을 새 배열로 착각 |
$result = array_unshift() 하면 $result에 숫자가 들어옴 |
원본 $data를 바로 사용, 반환값은 요소 수 |
| 인덱스를 하드코딩으로 참조 |
unshift 후 기존 [0]이 [2]로 밀려 엉뚱한 값 참조 |
foreach나 count()를 활용해 인덱스 직접 접근 자제 |
| array_merge로 앞에 추가하려 함 |
array_merge(["새값"], $arr) — 가능하지만 인수 순서 혼동 |
앞추가가 목적이면 array_unshift()가 의도 명확 |
| 연관 배열 기존 숫자 키가 충돌 |
0번 키가 이미 있을 때 덮어쓰여 데이터 손실 발생 가능 |
연관 배열에 unshift 시 기존 숫자 키 확인 필요 |
| 여러 번 unshift 순서 혼동 |
두 번 호출 시 마지막 unshift가 맨 앞 — 예상 순서 아님 |
여러 요소는 한 번에 array_unshift($a, $v1, $v2) 로 처리 |
핵심 한 줄 요약
array_unshift()배열 맨 앞에 요소 추가, 원본 직접 수정 (인플레이스)
재인덱싱추가 후 숫자 키가 전부 0부터 재설정됨
반환값새 배열이 아닌 추가 후 전체 요소 수(int)
반대 함수array_push=끝추가, array_shift=앞제거, array_pop=끝제거
여러 요소 추가인수 순서대로 앞에 삽입됨 — 역순 아님
Tags
#PHP #array_unshift #배열앞추가 #배열앞에넣기 #array_push #array_shift #재인덱싱 #PHP배열함수 #PHP함수 #PHP학습 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, array_unshift, 배열앞추가, 배열앞에넣기, array_push, array_shift, 재인덱싱, PHP배열함수, PHP함수, PHP학습, 웹개발, 티스토리
댓글