php实现分页功能的3种方法第3/3页

PHP实现分页功能的3种方法第3/3页的完整攻略

一、分页功能的基本原理

分页功能可以理解为将一份较大的数据集合分割成若干个小的数据块,并根据用户需求一块一块地输出,从而达到减轻服务器负担和提高用户访问速度的目的。其基本原理是结合 SQL 语句中的 LIMIT 和 OFFSET 命令实现。其中,LIMIT 表示要读取多少条数据,OFFSET表示从哪条数据开始读取。

二、方法三:封装分页类

使用 PHP封装分页类,使分页功能更易于组织和调用。步骤如下:

1. 创建统一的分页类

class Pager {
    private $total;                 //总记录数
    private $pagesize;              //每页显示多少条
    private $limitpage;             //总共多少页
    private $page;                  //当前是第几页
    private $nums;                  //显示多少个页码    
    private $url;                   //地址栏传递的整个URL字符串

    function __construct($total,$pagesize,$nums) {
        $this->total=$total;
        $this->pagesize=$pagesize;
        $this->nums=$nums;
        $this->limitpage=ceil($this->total/$this->pagesize);
        $this->page=empty($_GET['page'])?1:$_GET['page'];
        $this->url=$this->getUrl();
    }

2. 获取当前页码方法

    private function getUrl() {
        $url=$_SERVER['REQUEST_URI'];
        $parse=parse_url($url);
        if(isset($parse['query'])) {
            parse_str($parse['query'],$params);
            unset($params['page']);
            $url=$parse['path'].'?'.http_build_query($params);
        }
        return $url;
    }

    public function getPage() {
        $page=$this->page;
        if($page<1) {
            $page=1;
        }
        if($page>$this->limitpage) {
            $page=$this->limitpage;
        }
        return $page;
    }

3. SQL语句中用到的基本方法

    public function getLimit() {
        $offset=($this->getPage()-1)*$this->pagesize;
        return $offset.','.$this->pagesize;
    }

    public function getSql() {
        $offset=$this->getLimit();
        return "SELECT * FROM table1 LIMIT {$offset}";
    }

4. 显示页码方法

    public function getPages() {
        $pg=$this->nums%2==0?($this->nums/2):floor($this->nums/2)+1;
        $start=$this->getPage()-$pg+1;
        $start=$start<1?1:$start;
        $end=$start+$this->nums-1;
        $end=$end>$this->limitpage?$this->limitpage:$end;
        $url=$this->url."&page=";
        $pagestr='';
        if($this->page>1){
            $prev=$this->page-1;
            $pagestr.="<a href='{$url}1'>首页</a> ";
            $pagestr.="<a href='{$url}{$prev}'>上一页</a> ";
        }
        else {
            $pagestr.="<span class='disabled'>首页</span> ";
            $pagestr.="<span class='disabled'>上一页</span> ";
        }
        for($i=$start;$i<=$end;$i++) {
            if($i==$this->page) {
                $pagestr.="<span class='current'>{$i}</span> "; 
            }
            else {
                $pagestr.="<a href='{$url}{$i}'>{$i}</a> ";
            }
        }
        if($this->page<$this->limitpage) {
            $next=$this->page+1;
            $pagestr.="<a href='{$url}{$next}'>下一页</a> ";
            $pagestr.="<a href='{$url}{$this->limitpage}'>尾页</a> ";
        }
        else {
            $pagestr.="<span class='disabled'>下一页</span> ";
            $pagestr.="<span class='disabled'>尾页</span> ";
        }
        return $pagestr;
    }
}

5. 使用

使用封装好的分页类,只需要几行代码即可实现分页功能:

<?php 
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=database", "username", "password");
    $total = $dbh->query('SELECT count(*) from table1')->fetchColumn();  //总记录数
    $pagesize = 10;     //每页显示多少条    
    $nums = 5;      //显示多少个页码 
    $pager = new Pager($total,$pagesize,$nums);      //初始化分页类 
    $limit = $pager->getLimit();  //获取SQL语句中要使用的OFFSET和LIMIT 
    $sql = 'SELECT * FROM table1 LIMIT '.$limit;  //组合SQL语句 
    $stmt = $dbh->query($sql);      //执行查询 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'].' '.$row['col1'].' '.$row['col2'].'<br/>';
    }
    echo $pager->getPages();     //输出页码 
?> 

三、示例应用

示例1:分页数据展示

<?php 
    //连接数据库
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=database", "username", "password");
    //获取总记录数
    $total = $dbh->query('SELECT count(*) from table1')->fetchColumn();
    //每页显示多少条    
    $pagesize = 10;     
    //显示多少个页码 
    $nums = 5;      
    //初始化分页类 
    $pager = new Pager($total,$pagesize,$nums);      
    //获取SQL语句中要使用的OFFSET和LIMIT 
    $limit = $pager->getLimit();  
    //组合SQL语句 
    $sql = 'SELECT * FROM table1 LIMIT '.$limit;  
    //执行查询 
    $stmt = $dbh->query($sql);
    //输出数据
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'].' '.$row['col1'].' '.$row['col2'].'<br/>';
    }
    //输出页码 
    echo $pager->getPages();    
?> 

示例2:分页数据展示(可根据名称和时间筛选)

<?php 
    //连接数据库
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=database", "username", "password");
    //获取总记录数
    $name = isset($_GET['name']) ? trim($_GET['name']) : '';
    $start_time = isset($_GET['start_time']) ? strtotime(trim($_GET['start_time'])) : '';
    $end_time = isset($_GET['end_time']) ? strtotime(trim($_GET['end_time'])) : '';
    $where = '1=1';
    if($name) {
        $where .= " and name like '%".$name."%'";
    }
    if($start_time) {
        $where .= " and create_time >= '".$start_time."'";
    }
    if($end_time) {
        $where .= " and create_time <= '".$end_time."'";
    }   
    $total = $dbh->query('SELECT count(*) from table1 where '.$where)->fetchColumn();
    //每页显示多少条    
    $pagesize = 10;     
    //显示多少个页码 
    $nums = 5;      
    //初始化分页类 
    $pager = new Pager($total,$pagesize,$nums);      
    //获取SQL语句中要使用的OFFSET和LIMIT 
    $limit = $pager->getLimit();  
    //组合SQL语句 
    $sql = "SELECT * FROM table1 where ".$where." LIMIT ".$limit;  
    //执行查询 
    $stmt = $dbh->query($sql);
    //输出数据
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'].' '.$row['col1'].' '.$row['col2'].'<br/>';
    }
    //输出页码 
    echo $pager->getPages();    
?> 

以上两个示例分别是基本的分页数据展示和可根据名称和时间筛选的分页数据展示,通过封装分页类,可以在不同的应用场景中直接调用,代码更易于组织和管理,大大提高了开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现分页功能的3种方法第3/3页 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 最常用的PHP正则表达式收集整理

    当我们需要根据某种规则匹配文本中的内容时,经常使用正则表达式。PHP是一门非常流行的编程语言,而其内置的正则表达式函数库也相当强大,可以帮助我们完成许多文本匹配工作。本文将提供一份介绍最常用的PHP正则表达式的文档,以下是完整攻略: 最常用的PHP正则表达式收集整理 基本元素 字符 字符是正则表达式的最基本组成部分。可以用于匹配字面值(如“a”、“b”等)或…

    PHP 2023年5月26日
    00
  • PHP经典算法集锦【经典收藏】

    PHP 经典算法集锦【经典收藏】攻略 什么是 PHP 经典算法集锦【经典收藏】? PHP 经典算法集锦是一本涵盖 PHP 常见算法题目的书籍,包含了大量 PHP 编写的算法示例,是广大 PHP 工程师们学习和提升算法编程能力的重要参考资料。 该书的主要内容分为以下部分: 数值操作相关算法 字符串相关算法 数组相关算法 链表相关算法 树相关算法 查找与排序算法…

    PHP 2023年5月23日
    00
  • PHP中unset,array_splice删除数组中元素的区别

    PHP 中 unset 和 array_splice 都可以用来删除数组中的元素,但是两者实现的方式有所不同。下面就分别来详细讲解一下 unset 和 array_splice 的区别。 unset 删除数组中的元素 使用 unset 可以删除数组中指定元素,其语法如下: unset($array[$key]); 其中,$array 表示要操作的数组,$ke…

    PHP 2023年5月26日
    00
  • php数组操作之键名比较与差集、交集赋值的方法

    下面就给您讲解一下 PHP 数组操作之键名比较与差集、交集赋值的方法。 比较键名 在 PHP 中比较两个数组的键名,可以使用 array_diff_key() 函数,它的作用是返回数组 $array1 中存在但是 $array2 中不存在的键名。示例: //数组1 $array1 = array(‘name’ => ‘张三’, ‘age’ => …

    PHP 2023年5月26日
    00
  • PHP函数in_array()使用详解

    PHP函数in_array()使用详解 什么是in_array()函数? in_array()函数是PHP中的一个内置函数,用于判断指定的数值、字符串、数组等元素是否存在于数组中。如果存在,则返回 true,否则返回 false。 其语法如下: bool in_array ( mixed $needle , array $haystack [, bool $…

    PHP 2023年5月26日
    00
  • 一段php加密解密的代码

    针对一段 PHP 加密解密代码的完整攻略,我们需要考虑以下几个方面: 加密算法的选择 加密密钥的生成和管理 加密流程的实现 解密流程的实现 接下来,我根据以上几个方面,逐一讲述一下这个攻略的过程。 1. 选择合适的加密算法 在 PHP 中,提供了很多加密算法的函数和库,比如 mcrypt、openssl、bcrypt 等等。具体选择哪种加密算法,需要根据实际…

    PHP 2023年5月23日
    00
  • PHP时间相关常用函数用法示例

    PHP时间相关常用函数用法示例 在开发中,我们常常需要用到时间相关的操作和处理,比如计算两个时间之间的差、获取当前时间戳、格式化时间等。PHP提供了很多时间相关的内置函数,使用这些函数可以轻松地完成时间相关的操作和处理。接下来,我们将详细介绍PHP时间相关常用函数的用法。 1.获取时间戳 在PHP中,使用time()函数可以获取当前的时间戳。时间戳是一个整数…

    PHP 2023年5月26日
    00
  • gRPC实践之proto及Maven插件概念及使用详解

    gRPC简介 gRPC是Google开源的高性能RPC框架,基于HTTP/2的协议标准,可使用多种编程语言进行开发。gRPC支持基于protobuf的序列化和反序列化,使用proto文件定义服务和消息格式。gRPC还提供了丰富的插件和工具支持,使其开发和维护更加便捷快速。 proto及Maven插件概念 proto文件是gRPC的核心文件,它用于定义gRPC…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部