반응형
Web Development · PHP 배열 조작
PHP array_pop() — 배열 끝 요소 제거 · 스택 pop · array_push()와 비교 완전 정리
배열의 마지막 요소를 제거하면서 그 값을 반환 — array_push()와 짝을 이뤄 LIFO 스택 구조를 만드는 핵심 함수
시작 오늘 분석할 코드
array_pop()은 배열의 마지막 요소를 제거하고 그 값을 반환한다. 제거된 요소를 변수에 받아 즉시 활용할 수 있다. 빈 배열에 사용하면 NULL을 반환한다.
<?php $data = array("사과", "귤", "감"); $kaki = array_pop($data); // 마지막 요소 제거 + 반환 print $kaki; // 감 print "<PRE>"; print_r($data); print "</PRE>"; ?>
제거 전 $data
Array
(
[0] => 사과
[1] => 귤
[2] => 감
)
(
[0] => 사과
[1] => 귤
[2] => 감
)
→
array_pop() 후 $data
Array
(
[0] => 사과
[1] => 귤
)
$kaki = "감"
(
[0] => 사과
[1] => 귤
)
$kaki = "감"
"감"(인덱스 2)이 제거되어 $kaki에 저장됨 / $data는 2개만 남음
용어 핵심 용어 정리
array_pop()배열 끝 요소를 제거하고 그 값을 반환 — 빈 배열이면 NULL 반환
LIFOLast In First Out — 마지막에 push한 것이 pop으로 먼저 나옴
array_push() 짝array_push(뒤추가) + array_pop(뒤제거) = 스택 구조
반환값제거된 요소의 값 — 이 값이 필요 없으면 그냥 호출해도 됨
array_shift() 차이array_shift()는 앞(첫 번째) 요소 제거 / array_pop()은 뒤(마지막) 요소 제거
인덱스 재정렬 없음array_pop() 후 남은 요소의 인덱스 변화 없음 (array_shift는 재정렬 발생)
1 array_pop() vs array_shift() — 어디서 제거?
array_pop() — 뒤에서 제거
$data = ["사과","귤","감"];
$last = array_pop($data);
// $last = "감"
// $data = ["사과","귤"] (인덱스 그대로)
$last = array_pop($data);
// $last = "감"
// $data = ["사과","귤"] (인덱스 그대로)
array_shift() — 앞에서 제거
$data = ["사과","귤","감"];
$first = array_shift($data);
// $first = "사과"
// $data = ["귤","감"] (인덱스 0부터 재정렬)
$first = array_shift($data);
// $first = "사과"
// $data = ["귤","감"] (인덱스 0부터 재정렬)
※ array_pop()은 인덱스 재정렬이 없어 빠르다. array_shift()는 제거 후 모든 요소의 인덱스가 0부터 재배치되어 배열이 클수록 오래 걸린다.
2 LIFO 스택 패턴 — 실행 취소 기능 구현
array_pop()의 가장 직관적인 활용은 "실행 취소(Undo)" 기능이다. 수행한 작업을 스택에 push하고, 취소 시 pop으로 마지막 작업을 꺼내 되돌린다.
$history = []; // 작업 수행 → 히스토리에 push array_push($history, "배경색 변경"); array_push($history, "폰트 크기 변경"); array_push($history, "텍스트 추가"); // 실행 취소 → 마지막 작업 pop $undo = array_pop($history); print "취소: $undo"; // 취소: 텍스트 추가 // history 남은 것: ["배경색 변경", "폰트 크기 변경"]
3 빈 배열 처리 — NULL 반환 주의
array_pop()을 빈 배열에 사용하면 NULL을 반환하고 배열에는 아무 변화가 없다. NULL을 받은 변수를 문자열 출력하면 빈 문자열이 표시된다. 방어 코드를 작성할 때 주의가 필요하다.
$empty = []; $result = array_pop($empty); print var_dump($result); // NULL // 방어 패턴 — 비어 있지 않을 때만 pop if (!empty($stack)) { $val = array_pop($stack); }
반응형
4 배열 조작 함수 4종 비교
| 함수 | 위치 | 동작 | 반환값 | 인덱스 재정렬 |
|---|---|---|---|---|
array_push() |
뒤 | 추가 | 배열 길이 | 없음 |
array_pop() |
뒤 | 제거 | 제거된 값 | 없음 |
array_unshift() |
앞 | 추가 | 배열 길이 | 있음 (기존 요소 뒤로) |
array_shift() |
앞 | 제거 | 제거된 값 | 있음 (0부터 재번호) |
5 end() vs array_pop() — 읽기만 vs 제거
마지막 요소를 보고 싶지만 제거하지는 않으려면 end()를 사용한다. end()는 배열 포인터를 마지막으로 이동하고 그 값을 반환하지만, 배열을 수정하지 않는다.
array_pop() — 제거 + 반환
$data = ["사과","귤","감"];
$last = array_pop($data);
// $last = "감"
// $data = ["사과","귤"] ← 배열 변경됨
$last = array_pop($data);
// $last = "감"
// $data = ["사과","귤"] ← 배열 변경됨
end() — 읽기만 (배열 유지)
$data = ["사과","귤","감"];
$last = end($data);
// $last = "감"
// $data = ["사과","귤","감"] ← 그대로
$last = end($data);
// $last = "감"
// $data = ["사과","귤","감"] ← 그대로
※ 마지막 요소를 확인만 하고 배열을 유지해야 하면 end(). 마지막 요소를 꺼내서 처리해야 하면 array_pop()을 선택한다.
6 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 빈 배열 pop 후 NULL 처리 안함 | $val = null → 문자열 연산 시 오류 또는 빈 결과 | if (!empty($arr)) { $v = array_pop($arr); } 패턴 |
| array_pop으로 앞 요소 제거 기대 | 마지막 요소가 제거됨 — 기대와 다른 결과 | 첫 요소 제거는 array_shift() 사용 |
| 제거 값을 변수에 받지 않고 나중에 필요 | 제거 후 값 복구 불가 | $removed = array_pop($arr); 로 먼저 저장 |
| array_pop 후 인덱스 재정렬 기대 | pop 후 남은 요소의 인덱스가 그대로 — 마지막 인덱스만 빠짐 | 재정렬 필요 시 array_values($arr) 호출 |
| 반환 NULL을 처리하지 않고 문자열 비교 | if ($v == "감") {} → null과 "감" 비교 — 의도치 않은 결과 | $v = array_pop($arr); if ($v !== null && $v == "감") |
| array_pop과 unset 혼동 | unset($arr[2]) — 제거하지만 값을 반환하지 않고 빈 인덱스 남음 | 제거 + 반환이 필요하면 array_pop() / 단순 제거는 unset() |
6 array_splice() — 더 유연한 제거 방법
array_pop()은 마지막 요소 제거만 가능하다. 특정 위치나 여러 요소를 제거하려면 array_splice()를 사용한다. 단, 학습 단계에서는 array_pop()으로 기본 패턴을 익히고 나서 array_splice()로 확장하는 것이 좋다.
$data = ["사과", "귤", "감", "수박"]; // array_pop() — 마지막 1개만 제거 $last = array_pop($data); // "수박" 제거 // array_splice() — 위치와 개수 지정 제거 $removed = array_splice($data, 1, 2); // 인덱스 1부터 2개 제거 // $removed = ["귤","감"] / $data = ["사과"] // 마지막 N개 제거 (array_pop 반복 대신) array_splice($data, -2); // 뒤에서 2개 제거
※ array_pop()은 마지막 1개 제거에 최적화된 단순 함수다. 중간 요소 제거나 여러 요소 일괄 제거가 필요하면 array_splice()를 사용한다.
7 반복 pop — 배열 비울 때까지
while 루프 안에서 array_pop()을 반복하면 배열이 완전히 빌 때까지 한 요소씩 처리할 수 있다. 역순 처리 패턴으로도 활용된다.
$items = ["A", "B", "C", "D"]; // 배열이 빌 때까지 역순으로 처리 while (!empty($items)) { $item = array_pop($items); print "처리: $item<br>"; } // 처리: D // 처리: C // 처리: B // 처리: A // (역순 처리 = 스택 전체 비우기)
핵심 한 줄 요약
array_pop($arr)배열 마지막 요소를 제거하고 그 값을 반환 — 빈 배열이면 NULL
인덱스 재정렬 없음pop 후 남은 요소 인덱스 그대로 — array_shift()는 0부터 재정렬
LIFO 스택 쌍array_push(뒤추가) + array_pop(뒤제거) = 스택 / push+shift = 큐
NULL 방어if (!empty($arr)) { $v = array_pop($arr); } — 빈 배열 pop 방지
array_shift() 차이pop = 뒤에서 제거 (빠름) / shift = 앞에서 제거 (인덱스 재정렬, 느림)
while 역순 처리while (!empty($arr)) array_pop() → 전체 역순 처리 패턴
실행 취소 패턴push로 작업 기록 → pop으로 마지막 작업 되돌리기 (Undo 구조)
원본 배열 수정array_pop()은 $arr 자체를 변경 — 제거 전 백업 필요 시 $backup = $arr;
end() 차이end() = 마지막 값 읽기만 (배열 유지) / array_pop() = 읽기+제거
array_splice() 확장여러 요소 또는 중간 위치 제거 필요 시 array_splice() — pop은 마지막 1개만
반복 pop 패턴while (!empty($arr)) { $v = array_pop($arr); } → 역순으로 전체 처리
unset() vs array_pop()unset($arr[2]) = 제거만(빈 인덱스 남음) / pop = 제거+반환(빈 인덱스 없음)
array_values() 조합pop 후 인덱스 재정렬 필요 시 $arr = array_values($arr); 로 0부터 재번호
성능pop은 뒤 제거라 O(1) 빠름 / shift는 앞 제거라 전체 재정렬 O(n) 느림
4함수 선택 기준뒤추가=push / 뒤제거=pop / 앞추가=unshift / 앞제거=shift
실행 취소 Undo작업을 push로 기록 → Ctrl+Z에서 pop으로 마지막 작업 되돌리기
Tags
#PHP #array_pop #배열제거 #스택 #array_push #배열함수 #PHP함수 #PHP학습 #웹개발 #티스토리 #LIFO #뒤에서제거 #pop
▼ 티스토리 태그 입력란 복사용
PHP, array_pop, 배열제거, 스택, array_push, 배열함수, PHP함수, PHP학습, LIFO, 뒤에서제거
반응형
'php' 카테고리의 다른 글
| PHP array_merge() — 두 배열 합치기 · 키 충돌 규칙 · + 연산자와 차이 완전 정리 (0) | 2026.07.09 |
|---|---|
| PHP array_shift() — 배열 앞 요소 제거 · 큐 패턴 · array_pop()과 비교 완전 정리 (0) | 2026.07.09 |
| PHP array_push() — 배열 끝에 요소 추가 · 스택 구조 · [] 연산자와 비교 완전 정리 (0) | 2026.07.09 |
| PHP ksort() — 연관 배열 키 오름차순 정렬 · 사전순 · asort()와 비교 완전 정리 (0) | 2026.07.09 |
| PHP krsort() — 연관 배열 키 내림차순 정렬 · 역사전순 · ksort()와 비교 완전 정리 (0) | 2026.07.09 |
왕진 블로그

댓글