시작 오늘 분석할 코드
array_push()는 배열의 끝(뒤)에 하나 이상의 요소를 추가한다. 여러 개를 한 번에 추가할 수 있는 것이 $arr[] = $val; 패턴과의 차이점이다. 추가 후 배열의 새 길이(요소 수)를 반환한다.
<?php $data = array("사과", "귤", "감"); array_push($data, "없음", "수박"); // 2개 동시 추가 print "<PRE>"; print_r($data); print "</PRE>"; ?>
추가 전
Array
(
[0] => 사과
[1] => 귤
[2] => 감
)
→
array_push() 후
Array
(
[0] => 사과
[1] => 귤
[2] => 감
[3] => 없음
[4] => 수박
)
"없음"(인덱스 3), "수박"(인덱스 4)이 순서대로 추가됨
용어 핵심 용어 정리
array_push()배열 끝에 하나 이상의 요소를 추가 — 반환값은 추가 후 배열 길이(int)
스택(Stack)LIFO(Last In First Out) 구조 — array_push(넣기) + array_pop(꺼내기)로 구현
$arr[] = $val단일 요소 추가의 간결한 대안 — 1개 추가 시 array_push보다 일반적
인덱스 자동 배정추가된 요소는 현재 최대 인덱스+1을 자동 부여 — 2 다음에는 3
array_pop()array_push()의 반대 — 배열 끝 요소를 제거하고 반환
여러 개 동시 추가array_push($arr, "A", "B", "C") — 3개를 한 호출로 순서대로 추가
1 array_push() vs $arr[] = 추가 — 언제 무엇을?
array_push() — 여러 개 추가
array_push($data, "없음", "수박");
// 2개를 한 번에 추가
// 반환값: 추가 후 배열 길이 (5)
$arr[] = — 단일 추가 (더 일반적)
$data[] = "없음";
$data[] = "수박";
// 1개씩 2번 — 간결하고 흔한 패턴
※ PHP 7.3+에서 단일 요소 추가는 $arr[] = $val; 패턴이 array_push()보다 성능이 약간 더 좋다 (함수 호출 오버헤드 없음). 여러 개를 한 번에 추가할 때는 array_push()가 더 읽기 쉽다.
2 스택(Stack) 패턴 — array_push + array_pop
array_push()는 스택 자료구조에서 "넣기(push)" 연산에 해당한다. array_pop()을 함께 사용하면 LIFO(Last In, First Out — 마지막에 넣은 것이 먼저 나오는) 스택이 된다.
$stack = []; array_push($stack, "A"); // [A] array_push($stack, "B"); // [A, B] array_push($stack, "C"); // [A, B, C] $top = array_pop($stack); // C 꺼냄 → [A, B] print $top; // C (마지막에 넣은 것이 먼저 나옴)
※ 실무에서 스택이 직접 필요한 경우는 많지 않지만, "작업 큐", "실행 취소 히스토리", "DFS(깊이 우선 탐색)" 같은 알고리즘에서 스택 패턴이 활용된다.
3 반환값 활용 — 추가 후 배열 길이
array_push()는 추가 후 배열의 현재 요소 수(길이)를 반환한다. 이를 활용해 추가 즉시 길이를 확인하거나, 최대 개수 제한 로직을 구현할 수 있다.
$cart = ["사과", "귤"]; $count = array_push($cart, "수박"); print "장바구니 아이템 수: $count"; // 3 // 최대 5개 제한 패턴 if (count($cart) < 5) { array_push($cart, "바나나"); } else { print "장바구니가 가득 찼습니다."; }
4 배열 조작 함수 4종 비교
| 함수 |
위치 |
동작 |
반환값 |
array_push() |
뒤(끝) |
추가 |
추가 후 배열 길이 |
array_pop() |
뒤(끝) |
제거 |
제거된 요소 값 |
array_unshift() |
앞(시작) |
추가 |
추가 후 배열 길이 |
array_shift() |
앞(시작) |
제거 |
제거된 요소 값 |
※ 기억법: push/unshift = 추가 (반환값 = 길이), pop/shift = 제거 (반환값 = 제거된 값). push/pop은 뒤(끝), unshift/shift는 앞(시작).
5 반복문 안에서 array_push() — 동적 배열 구축
for나 foreach 루프 안에서 array_push()나 $arr[] = 패턴으로 조건에 맞는 요소만 선택해 새 배열을 만들 수 있다. 이 패턴은 필터링, 변환, 집계에서 자주 사용된다.
// 짝수만 담는 배열 만들기 $numbers = [1, 2, 3, 4, 5, 6, 7, 8]; $evens = []; foreach ($numbers as $n) { if ($n % 2 === 0) { array_push($evens, $n); // 또는 $evens[] = $n; } } print_r($evens); // [2, 4, 6, 8] // DB 결과를 배열로 축약하는 흔한 패턴 $names = []; foreach ($rows as $row) { array_push($names, $row['name']); } // 또는 array_column($rows, 'name') 한 줄로 동일 결과
※ 필터/매핑 목적의 배열 구축은 array_filter(), array_map(), array_column()으로 더 간결하게 표현할 수 있다. 복잡한 조건이나 누적 로직이 있을 때는 foreach + array_push 패턴이 직관적이다.
6 자주 하는 실수
| 실수 |
증상 |
해결 |
| $new = array_push($arr, $val) 반환값으로 배열 기대 |
$new = 배열 길이(정수) — 배열 아님 |
array_push($arr, $val); 후 $arr 사용 |
| array_push에 연관 배열 키 기대 |
추가된 요소는 자동 숫자 인덱스 부여 |
연관 배열에 키 지정 추가는 $arr['key'] = $val; 사용 |
| array_push로 배열 안에 배열 추가 혼동 |
array_push($arr, $arr2) = $arr2가 요소 1개로 추가 |
합치려면 array_merge($arr, $arr2); 또는 ... 스프레드 연산자 |
| 큰 배열에 반복 array_push() 호출 |
함수 호출 오버헤드가 누적 — 루프 내 성능 저하 |
루프 내 1개씩 추가는 $arr[] = $val; 패턴 사용 |
| array_push의 첫 인수에 변수 아닌 리터럴 |
PHP Fatal error: Only variables can be passed by reference |
array_push()는 첫 번째 인수가 반드시 변수 참조여야 함 |
6 큐(Queue) 패턴 — array_push + array_shift
스택(LIFO)과 달리, 큐(Queue, FIFO)는 먼저 넣은 것이 먼저 나온다. PHP에서 array_push()로 뒤에 추가하고 array_shift()로 앞에서 꺼내면 FIFO 큐가 된다. 작업 대기열, 메시지 버퍼 같은 패턴에서 활용한다.
// FIFO 큐 (선입선출) $queue = []; array_push($queue, "주문1"); // [주문1] array_push($queue, "주문2"); // [주문1, 주문2] array_push($queue, "주문3"); // [주문1, 주문2, 주문3] $first = array_shift($queue); // 주문1 처리 → [주문2, 주문3] print "처리: $first"; // 처리: 주문1
※ LIFO 스택(push+pop)은 탐색 알고리즘, 실행 취소에서 / FIFO 큐(push+shift)는 작업 대기열, 이벤트 처리에서 활용된다. PHP는 두 패턴 모두 배열 하나로 구현 가능하다.
7 연관 배열에 push 시도 — 동작 방식 이해
연관 배열에 array_push()를 사용하면 추가된 요소는 자동 숫자 인덱스(현재 최대 숫자 인덱스+1)를 부여받는다. 이 때문에 의도치 않게 연관 배열에 숫자 인덱스 요소가 섞일 수 있다.
$assoc = ["TV1"=>500, "TV2"=>1000]; array_push($assoc, "추가값"); // 자동 인덱스 부여 print_r($assoc); // Array ( [TV1] => 500 [TV2] => 1000 [0] => 추가값 ) // TV1, TV2는 문자열 키 — 숫자 인덱스는 0부터 시작 // 연관 배열에 키를 지정해 추가하려면 직접 대입 $assoc["RADIO1"] = 800; // 키 지정 추가
⚠ 연관 배열에 array_push()를 쓰면 키가 없는 숫자 인덱스 요소가 섞여 foreach에서 혼란이 생길 수 있다. 키를 지정해 추가하려면 $arr['key'] = $val; 방식을 사용한다.
8 array_push() vs array_merge() — 다른 배열의 요소 추가
다른 배열의 모든 요소를 추가하려면 array_push()와 array_merge() 중 어느 것을 사용해야 할까. array_push($arr, ...$arr2)는 스프레드 연산자로 $arr2 요소를 펼쳐서 추가한다. array_merge()는 두 배열을 합쳐 새 배열을 반환한다.
$fruits = ["사과", "귤"]; $more = ["수박", "바나나"]; // array_push + 스프레드 — 원본 배열($fruits)에 추가 array_push($fruits, ...$more); // ["사과","귤","수박","바나나"] // array_merge — 새 배열 반환 (원본 불변) $combined = array_merge($fruits, $more); // 원본 $fruits는 변하지 않음
※ 원본 배열을 직접 수정하면서 다른 배열의 요소를 추가 → array_push(...$more). 새 배열을 만들고 원본을 보존 → array_merge(). 두 방식 중 용도에 맞는 것을 선택한다.
핵심 한 줄 요약
array_push($arr, ...)배열 끝에 1개 이상의 요소를 추가 — 반환값은 추가 후 배열 길이
$arr[] = $val 대안1개 추가 시 $arr[] = $val; 패턴이 더 일반적이고 함수 오버헤드 없음
스택 push/pop 쌍array_push(넣기) + array_pop(꺼내기) = LIFO 스택 구조
뒤 추가/제거 4함수push(뒤추가) / pop(뒤제거) / unshift(앞추가) / shift(앞제거)
반환값은 int(길이)$len = array_push($arr, $v) → 새 길이(정수). 배열이 아님에 주의
스프레드 조합array_push($arr, ...$arr2) → $arr2의 모든 요소를 $arr에 추가
array_merge() 차이array_merge는 새 배열 반환 (원본 불변) / array_push는 원본 직접 수정
사용 시점여러 요소를 한 번에 추가하거나 스택 패턴이 필요할 때
큐 패턴 (FIFO)push(뒤추가) + shift(앞제거) = FIFO 큐 / push+pop = LIFO 스택
반복 추가 대안배열 구축 루프에서는 $arr[] = $v; 가 array_push() 보다 약간 빠름
array_filter/map 대안조건 필터링 → array_filter() / 변환 → array_map()으로 대체 가능
스프레드 합치기array_push($arr, ...$other) → $other 배열의 모든 요소를 $arr에 병합
Tags
#PHP #array_push #배열추가 #스택 #array_pop #배열함수 #PHP함수 #PHP학습 #웹개발 #티스토리 #LIFO #뒤에추가 #push
▼ 티스토리 태그 입력란 복사용
PHP, array_push, 배열추가, 스택, array_pop, 배열함수, PHP함수, PHP학습, LIFO, 뒤에추가
댓글