加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

分析PHP中的数组分页实现

发布时间:2022-07-16 14:58:12 所属栏目:PHP教程 来源:互联网
导读:在日常开发的业务环境中,我们一般都会使用 MySQL 语句来实现分页的功能。但是,往往也有些数据并不多,或者只是获取 PHP 中定义的一些数组数据时需要分页的功能。 这时,我们其实不需要每次都去查询数据库,可以在一次查询中把所有的数据取出来,然后在 PHP
  在日常开发的业务环境中,我们一般都会使用 MySQL 语句来实现分页的功能。但是,往往也有些数据并不多,或者只是获取 PHP 中定义的一些数组数据时需要分页的功能。
  这时,我们其实不需要每次都去查询数据库,可以在一次查询中把所有的数据取出来,然后在 PHP 的代码层面进行分页功能的实现。
 
  今天,我们就来学习一下可以实现这个能力的一些函数技巧。
 
  首先,我们还是准备好测试数据。
  
  $data = [
 
  
  ];
 
   
 
  // $p = $_GET['p'];
 
  $p = 2;
 
  $currentPage = $p <= 1 ? 0 : $p - 1;
 
  $pageSize = 3;
 
  $offset = $currentPage * $pageSize;
 
  假设 $data 就是从数据库中取出的全部数据,或者就是我们写死在 PHP 代码中的数据。然后我们设定 $p 为接收到的请求参数,当前访问的是第二页。$currentPage 是用于查询偏移量的修正,在代码开发的世界中,下标索引都是从0开始的,所以我们需要对接收到的参数进行减一的操作。当然,你也可以设定前端传递的参数就是以 0 为第一页的。这个就不多解释了,相信大家只要正式的学习或者参与过开发项目都会明白它的意思。
 
 
  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 查询语句一模一样。没错,他们本身就是类似的操作。
 
  
  $pages = array_chunk($data, $pageSize);
 
  var_dump($pages);
 
  // array(4) {
 
  
  //     [1]=>
 
  //     array(3) {
 
  //       [0]=>
 
  //       string(1) "D"
 
  //       [1]=>
 
  //       string(1) "E"
 
  //       [2]=>
 
  //       string(1) "F"
 
  //     }
 
  //     [2]=>
   //       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) "J"
 
  // string(1) "K"
 
  参数错误时的表现
  接下来,我们看看如果参数错误,也就是偏移量或者所需的数据量大小有问题的话,这些操作将会有什么样的表现。
 
  
 
  var_dump(array_slice($data, $offset, 150));
 
  // array(8) {
 
  //     [0]=>
 
  //     string(1) "D"
 
  
  //     [6]=>
 
  //     string(1) "J"
 
  //     [7]=>
 
  //     string(1) "K"
 
  //   }
 
  var_dump(array_slice($data, 15, $pageSize));
 
  // array(0) {
 
  // }
 
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读