PHP 배열 페이지 구현

오늘 우 리 는 이 능력 을 실현 할 수 있 는 함수 기 교 를 배 워 보 자.
우선,우 리 는 테스트 데 이 터 를 준비 하 는 것 이 좋 겠 다.

$data = [
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G',
    'H',
    'I',
    'J',
    'K',
];

// $p = $_GET['p'];
$p = 2;
$currentPage = $p <= 1 ? 0 : $p - 1;
$pageSize = 3;
$offset = $currentPage * $pageSize;
가령\$data 는 데이터베이스 에서 꺼 낸 모든 데이터 나 우리 가 PHP 코드 에 죽은 데 이 터 를 쓴다 고 가정 합 니 다.그리고 받 은 요청 인자 로$p 를 설정 합 니 다.현재 방문 한 것 은 두 번 째 페이지 입 니 다.$currentPage 는 편 이 량 을 조회 하 는 데 사용 되 는 수정 입 니 다.코드 개발 의 세계 에서 아래 표 시 된 색인 은 모두 0 에서 시작 되 기 때문에 받 은 매개 변 수 를 줄 이 는 작업 이 필요 합 니 다.물론 전단 에서 전달 하 는 매개 변 수 는 0 을 첫 페이지 로 설정 할 수 있다.이것 은 더 이상 설명 할 필요 가 없다.모두 가 정식으로 공부 하거나 개발 프로젝트 에 참여 한 적 이 있다 면 그 뜻 을 이해 할 수 있 을 것 이 라 고 믿는다.
그리고 현재 페이지 에 표 시 된 정보 항목 수$pageSize,즉 3 개의 데이터 만 가 져 오 는 것 을 정의 합 니 다.마지막 으로,우 리 는 편 이 량,즉 MySQL 과 유사 한 LIMIT 의 그 인 자 를 계산 해 보 았 다.그것 의 역할 은 몇 번 째 조 에서 조 회 를 시작 한 후에$pageSize 에 맞 춰 몇 가지 조 회 를 하 는 것 입 니 다.이렇게 하면 우 리 는 현재 페이지 에 대응 하 는 데 이 터 를 얻 을 수 있다.페이지 의 원 리 를 다 설명 한 것 같다)
array_slice
첫 번 째 도 가장 기본 적 이 고 가장 흔히 볼 수 있 는 페이지 나 누 기 방식 입 니 다.바로 array 를 사용 하 는 것 입 니 다.slice()함수 로 구현 합 니 다.그것 의 역할 은 배열 에서 한 단락 의 내용 을 캡 처 하여 이 내용 의 배열 로 돌아 가 는 것 이다.

var_dump(array_slice($data, $offset, $pageSize));
// array(3) {
//     [0]=>
//     string(1) "D"
//     [1]=>
//     string(1) "E"
//     [2]=>
//     string(1) "F"
//   }
array_slice()함 수 는 세 개의 매개 변수 가 필요 합 니 다.두 번 째 매개 변 수 는 오프셋 입 니 다.세 번 째 매개 변 수 는 몇 개의 데 이 터 를 조회 하 는 것 입 니 다.그 중에서 세 번 째 인 자 는 선택 할 수 있 습 니 다.채 우지 않 으 면 현재 설정 한 오프셋 후의 데 이 터 를 모두 표시 합 니 다.우리 MySQL 검색 어 랑 똑 같 지 않 아 요?맞 아,그들 자체 가 비슷 한 조작 이 야.
array_chunk
array_chunk()함 수 는 하나의 수치 매개 변수 에 따라 하나의 배열 을 나 누 는 것 입 니 다.즉,배열 을 한 단락 의 하위 배열 로 나 누 는 것 입 니 다.분 단 된 배열 에 따라 아래 표 시 된 하위 배열 의 내용 을 가 져 올 수 있 습 니 다.이 내용 들 은 현재 페이지 에서 보 여 줘 야 할 데이터 입 니 다.

$pages = array_chunk($data, $pageSize);
var_dump($pages);
// array(4) {
//     [0]=>
//     array(3) {
//       [0]=>
//       string(1) "A"
//       [1]=>
//       string(1) "B"
//       [2]=>
//       string(1) "C"
//     }
//     [1]=>
//     array(3) {
//       [0]=>
//       string(1) "D"
//       [1]=>
//       string(1) "E"
//       [2]=>
//       string(1) "F"
//     }
//     [2]=>
//     array(3) {
//       [0]=>
//       string(1) "G"
//       [1]=>
//       string(1) "H"
//       [2]=>
//       string(1) "I"
//     }
//     [3]=>
//     array(2) {
//       [0]=>
//       string(1) "J"
//       [1]=>
//       string(1) "K"
//     }
//   }

var_dump($pages[$currentPage]);
// array(3) {
//     [0]=>
//     string(1) "A"
//     [1]=>
//     string(1) "B"
//     [2]=>
//     string(1) "C"
//   }
이 코드 는 분 단 된 배열 의 내용 을 출력 한 다음 에 필요 한 것 은 두 번 째 페이지,즉 아래 에 1 로 표 시 된 데 이 터 를 통 해 분 단 된 배열 을 통 해 필요 한 내용 을 편리 하 게 얻 을 수 있 습 니 다.이 함 수 를 사용 하여 배열 페이지 를 나 누 는 기능 은 매우 간단 하고 직관 적 이 며 오프셋 을 계산 할 필요 가 없습니다.바로 현재 페이지$current Page 와$pageSize 를 사용 하면 데이터 에 대한 그룹 을 완성 할 수 있 습 니 다.이 함 수 를 사용 하여 유사 한 조작 을 하 는 것 을 추천 합 니 다.
LimitIterator
마지막 으로 우리 가 배 워 야 할 것 은 하나의 교체 기 류 를 사용 하여 배열 의 페이지 를 나 누 는 능력 이다.이것 은 사용 하 는 것 이 비교적 적 고 아무 도 모 를 것 이다.그러나 사실은 LimitIterator 류 는 PHP 5.1 때 이미 제공 되 었 다.Iterator 의 한정 부분 집합 요 소 를 옮 겨 다 닐 수 있 도록 하 는 역할 을 합 니 다.즉,우리 코드 에 교체 기 모드 를 사용 하여 교체 기 인 터 페 이 스 를 실현 한다 면 이 교체 기 류 는 모두 이 종 류 를 사용 하여 페이지 를 나 눌 수 있다 는 것 이다.

foreach (new LimitIterator(new ArrayIterator($data), $offset, $pageSize) as $d) {
    var_dump($d);
}
// string(1) "D"
// string(1) "E"
// string(1) "F"
그것 이 필요 로 하 는 실례 화 구조 파 라미 터 는 3 개 를 포함 하고 첫 번 째 는 교체 기 대상 이다.배열 이 교체 기 대상 이 아니 기 때문에 우 리 는 Array Iterator 실례 를 사용 하여 우리 의 배열 데 이 터 를 교체 기 대상 으로 전환시킨다.뒤의 두 매개 변 수 는 오프셋 과 데이터 수량 입 니 다.이것 과 arrayslice()함 수 는 유사 하지만 다른 것 은 오프셋 매개 변수 도 선택 할 수 있 습 니 다.만약 우리 가 뒤의 선택 가능 한 인 자 를 주지 않 는 다 면,그것 은 모든 데 이 터 를 옮 겨 다 닐 것 이다.

foreach (new LimitIterator(new ArrayIterator($data)) as $d) {
    var_dump($d);
}
// string(1) "A"
// string(1) "B"
// string(1) "C"
// string(1) "D"
// string(1) "E"
// string(1) "F"
// string(1) "G"
// string(1) "H"
// string(1) "I"
// string(1) "J"
// string(1) "K"
매개 변수 오류 시 표현
다음은 매개 변수 가 잘못 되 었 거나 오프셋 이나 필요 한 데이터 크기 에 문제 가 있다 면 이 조작 들 이 어떤 표현 을 할 지 살 펴 보 자.

var_dump(array_slice($data, $offset, 150));
// array(8) {
//     [0]=>
//     string(1) "D"
//     [1]=>
//     string(1) "E"
//     [2]=>
//     string(1) "F"
//     [3]=>
//     string(1) "G"
//     [4]=>
//     string(1) "H"
//     [5]=>
//     string(1) "I"
//     [6]=>
//     string(1) "J"
//     [7]=>
//     string(1) "K"
//   }
var_dump(array_slice($data, 15, $pageSize));
// array(0) {
// }
array_slice()함수 가 오프셋 오류 에 대한 호 환 은 빈 배열 을 보 여 주 는 것 입 니 다.데이터 양 이 기준 치 를 초과 하면 모든 오프셋 후의 데 이 터 를 보 여 줍 니 다.

var_dump($pages[15]);
// NULL
array_chunk()는 아래 에 존재 하지 않 는 데이터 에 대해 당연히 NULL 값 을 되 돌려 줍 니 다.

foreach (new LimitIterator(new ArrayIterator($data), $offset, 150) as $d) {
    var_dump($d);
}
// string(1) "D"
// string(1) "E"
// string(1) "F"
// string(1) "G"
// string(1) "H"
// string(1) "I"
// string(1) "J"
// string(1) "K"

foreach (new LimitIterator(new ArrayIterator($data), 15, $pageSize) as $d) {
    var_dump($d);
}
// Fatal error: Uncaught OutOfBoundsException: Seek position 15 is out of range
LimitIterator 는 오프셋 오류 의 데이터 에 대해 오류 이상 정 보 를 직접 되 돌려 줍 니 다.이것 도 모델 처리 의 장점 이다.오류 가 있 으 면 모두 이상 한 형식 으로 돌아 가 우리 가 이상 에 대해 후속 적 인 처 리 를 하 는 데 편리 하 다.
다른 테스트 는 여러분 이 스스로 측정 할 수 있 습 니 다.예 를 들 어 오프셋 이 0 또는 마이너스 인 경우 데이터 양 이 0 또는 마이너스 인 경우 도 있 습 니 다.이런 것들 은 제 가 많이 쓰 지 않 겠 습 니 다.여러분 은 기 존의 지식 에 따라 결과 가 어떻게 될 지 추측 한 다음 에 코드 를 써 서 결과 가 자신의 기대 에 부합 되 는 지 검증 할 수 있 습 니 다.그러면 학습 효과 가 매우 좋 을 것 입 니 다!아래 테스트 코드 링크 에 테스트 가 있 었 습 니 다.그 결과 구덩이 가 있 었 습 니 다)
총결산
하나의 기능 이 세 가지 방식 으로 이 루어 지 는 것 이 코드 의 매력 이다.어느 것 이 좋 고 어느 것 이 나 쁜 지 에 대해 우 리 는 평 가 를 많이 하지 않 고 모든 것 을 업 무 를 핵심 으로 하여 선택 하 는 것 이다.비슷 한 기능 은 흔 하지 않 지만 많은 프로젝트 에서 만 날 수 있 습 니 다.예 를 들 어 백 스테이지 사용자 그룹 관 리 는 매우 흔 합 니 다.일반적으로 백 스테이지 사용자 그룹 이 특별한 대형 ERP 프로젝트 가 아니라면 많 지 않 지만 가끔 은 페이지 를 나 누 어야 할 정도 에 이 를 때 우 리 는 오늘 배 운 지식 을 사용 하 는 것 을 고려 할 수 있 습 니 다!
테스트 코드
이상 은 PHP 가 배열 페이지 를 나 누 는 상세 한 내용 입 니 다.더 많은 PHP 배열 페이지 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기