array_slice($array, $offset, $length)는 $offset 위치부터 $length개의 요소를 담은 새 배열을 반환합니다. 원래 배열은 바뀌지 않습니다. 끝까지 모두 가져오려면 $length를 생략하세요.
오프셋은 키가 아니라 위치입니다(0이 첫 번째 요소). 연관 배열이나 키가 0, 1, 2가 아닌 배열에서는 이것이 중요합니다.
음수 오프셋으로 마지막 N개 가져오기
음수 오프셋은 끝에서부터 셉니다. -1은 마지막 요소이고, -3은 끝에서 세 번째부터 시작합니다. 음수 길이는 끝에서 그만큼 앞에서 멈춥니다.
있는 것보다 많은 요소를 요청해도 괜찮습니다. array_slice($log, 0, 100)은 다섯 개를 모두 반환합니다.
preserve_keys로 원래 키 유지하기
네 번째 인수로 true를 넘기지 않으면 정수 키는 0부터 다시 매겨집니다. 문자열 키는 항상 유지됩니다.
데이터베이스 id처럼 키에 의미가 있고 나중에 그 키로 요소를 찾을 거라면 true를 쓰세요.
array_slice로 배열 페이지 나누기
페이지당 $perPage개 항목인 목록에서 $page 페이지를 보여 주는 것은 슬라이스 한 번입니다. 오프셋은 ($page - 1) * $perPage입니다. 이 예제는 페이지 링크가 있는 HTML 목록을 출력합니다. 실행하고 페이지 번호를 클릭하면 링크에서 설정된 $_GET['page']로 같은 스크립트가 다시 실행됩니다.
max(1, min($pages, ...)) 줄은 손으로 입력한 ?page=99나 ?page=-1을 유효한 범위 안에 묶어 둡니다. 데이터베이스라면 모든 행을 불러오는 대신 LIMIT과 OFFSET으로 한 페이지만 요청하겠지만, 이미 메모리에 있는 목록이라면 array_slice로 충분합니다.
array_slice와 array_splice
이름은 한 글자 차이지만 원본에 하는 일은 정반대입니다. array_slice는 일부를 복사해 꺼냅니다. array_splice는 넘긴 배열에서 그 부분을 잘라 내고, 번호를 다시 매기고, 지운 요소를 반환합니다. 잘라 낸 자리에 대체 요소를 삽입할 수도 있습니다.
array_slice | array_splice | |
|---|---|---|
| 원본 변경 | 아니요 | 예(참조로) |
| 반환값 | 선택한 부분 | 지운 부분 |
| 요소 삽입 | 불가 | 가능, 네 번째 인수 |
| 정수 키 | preserve_keys가 없으면 다시 매김 | 다시 매김 |
요소를 지우는 다른 방법은 배열에서 요소 삭제하기를 참고하세요.
배열을 묶음으로 나누기
예를 들어 상품을 세 개씩 행으로 배치하려고 모든 페이지가 한 번에 필요하다면 array_chunk가 반복되는 슬라이스를 대신 해 줍니다.
3을 2나 4로 바꾸고 다시 실행해 보세요. 마지막 묶음에는 남은 것이 들어갑니다.
자주 묻는 질문
PHP에서 배열의 처음 N개 요소를 가져오려면 어떻게 하나요?
array_slice($arr, 0, 3)은 처음 세 요소를 반환합니다. 배열의 요소가 셋보다 적으면 에러 없이 전부를 받습니다.
배열의 마지막 N개 요소를 가져오려면 어떻게 하나요?
음수 오프셋을 쓰세요: array_slice($arr, -3)은 마지막 세 요소를 반환합니다. 길이를 생략하면 "끝까지"라는 뜻입니다.
array_slice에서 preserve_keys는 무엇을 하나요?
기본적으로 array_slice는 정수 키를 0부터 다시 매깁니다. 원래 정수 키를 유지하려면 네 번째 인수로 true를 넘기세요: array_slice($arr, 2, 3, true). 문자열 키는 이 인수와 상관없이 항상 유지됩니다.
array_slice와 array_splice의 차이는 무엇인가요?
array_slice는 배열 일부의 복사본을 반환하고 원본은 그대로 둡니다. array_splice는 배열을 참조로 받아 그 부분을 잘라 내고(대체 요소 삽입도 가능) 잘라 낸 것을 반환합니다.