이 글에서는 데이터베이스를 사용하지 않고 PHP에서 배열 페이징을 구현하는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
PHP에서 배열 페이징 구현(비 데이터베이스)
일상 개발 비즈니스 환경에서는 일반적으로 MySQL 문을 사용하여 페이징 기능을 구현합니다. 그러나 일부 데이터는 크지 않거나 페이징 기능은 PHP에 정의된 일부 배열 데이터를 얻는 데만 필요한 경우가 많습니다. 현재로서는 실제로 매번 데이터베이스를 쿼리할 필요가 없습니다. 하나의 쿼리로 모든 데이터를 가져온 다음 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부터 시작하므로 수신된 매개변수를 1씩 줄여야 합니다. 물론 프런트 엔드에서 전달된 매개변수를 설정하여 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() 함수에는 3개의 매개변수가 필요하며, 두 번째 매개변수는 오프셋, 세 번째 매개변수는 여러 데이터 조각을 쿼리하는 것입니다. 그 중 세 번째 매개변수는 선택사항입니다. 작성하지 않을 경우 현재 설정된 오프셋 이후의 모든 데이터가 표시됩니다. 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이 포함된 데이터입니다. 분할된 배열을 통해 필요한 콘텐츠를 직접 쉽게 얻을 수 있습니다. 이 함수를 사용하여 배열 페이징을 수행하는 것은 매우 간단하고 직관적이며 오프셋을 계산할 필요가 없습니다. 현재 페이지 $currentPage 및 $pageSize를 직접 사용하여 데이터 그룹화를 완료하는 것이 좋습니다. 비슷한 일을 해보세요.
LimitIterator
마지막으로 배워야 할 것은 반복자 클래스를 사용하여 배열 페이징을 구현하는 기능입니다. 이는 덜 자주 사용되며 아마도 많은 사람들이 알지 못할 것입니다. 그러나 실제로 LimitIterator 클래스는 다음에서 소개되었습니다. PHP5.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개의 인스턴스화 구성 매개변수가 필요합니다. 첫 번째는 반복자 객체입니다. 배열은 반복자 객체가 아니므로 ArrayIterator 인스턴스를 사용하여 배열 데이터를 반복자 객체로 변환합니다. 다음 두 매개변수는 오프셋과 데이터 개수입니다. 이는 array_slice() 함수와 유사하지만 오프셋 매개변수도 선택사항이라는 점이 다릅니다. 다음 선택적 매개변수를 제공하지 않으면 모든 데이터를 순회합니다.
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 项目都不会很多,但有时候也会达到需要分页的程度,这时候,我们就可以考虑考虑使用今天所学的知识来做咯!
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E4%B8%AD%E7%9A%84%E6%95%B0%E7%BB%84%E5%88%86%E9%A1%B5%E5%AE%9E%E7%8E%B0%EF%BC%88%E9%9D%9E%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%89.php
推荐学习:php视频教程
위 내용은 데이터베이스를 사용하지 않고 PHP에서 배열 페이징을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 산 및 기본 데이터베이스 모델을 비교하여 특성과 적절한 사용 사례를 자세히 설명합니다. 산은 금융 및 전자 상거래 애플리케이션에 적합한 데이터 무결성 및 일관성을 우선시하는 반면 Base는 가용성 및

이 기사는 코드 주입과 같은 취약점을 방지하기 위해 PHP 파일 업로드 보안에 대해 설명합니다. 파일 유형 유효성 검증, 보안 저장 및 오류 처리에 중점을 두어 응용 프로그램 보안을 향상시킵니다.

기사는 내장 함수 사용, 화이트리스트 접근 방식 및 서버 측 유효성 검사와 같은 기술에 중점을 둔 보안을 향상시키기 위해 PHP 입력 유효성 검증에 대한 모범 사례를 논의합니다.

이 기사는 토큰 버킷 및 누출 된 버킷과 같은 알고리즘을 포함하여 PHP에서 API 요율 제한을 구현하고 Symfony/Rate-Limiter와 같은 라이브러리 사용 전략에 대해 설명합니다. 또한 모니터링, 동적 조정 요율 제한 및 손도 다룹니다.

이 기사에서는 PHP에서 암호를 보호하기 위해 PHP에서 Password_hash 및 Password_Verify 사용의 이점에 대해 설명합니다. 주요 주장은 이러한 기능이 자동 소금 생성, 강한 해싱 알고리즘 및 Secur를 통해 암호 보호를 향상 시킨다는 것입니다.

이 기사는 PHP 및 완화 전략의 OWASP Top 10 취약점에 대해 설명합니다. 주요 문제에는 PHP 응용 프로그램을 모니터링하고 보호하기위한 권장 도구가 포함 된 주입, 인증 파손 및 XSS가 포함됩니다.

이 기사는 PHP의 XSS 공격을 방지하기위한 전략, 입력 소독, 출력 인코딩 및 보안 향상 라이브러리 및 프레임 워크 사용에 중점을 둔 전략에 대해 설명합니다.

이 기사는 각각의 사용시기에 중점을 둔 PHP의 인터페이스 및 추상 클래스 사용에 대해 설명합니다. 인터페이스는 관련없는 클래스 및 다중 상속에 적합한 구현없이 계약을 정의합니다. 초록 클래스는 일반적인 기능을 제공합니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.
