这时,我们其实不需要每次都去查询数据库,可以在一次查询中把所有的数据取出来,然后在 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() 函数来实现。它的作用是从数组中截取出一段内容来并返回这段内容的数组。
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() 函数则是根据一个数值参数将一个数组进行分组,也就是将数组分割成一段一段的子数组。我们就可以根据分割后的数组来获取指定下标的子数组内容,这些内容就是当前的页面需要展示的数据了。
$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 就可以完成对于数据的分组了,非常