php数组分页实现方法

PHP数组分页实现方法

在 Web 开发中,我们经常需要使用分页功能。在 PHP 中,我们可以通过数组分页实现这个功能。

实现原理

  1. 获取总记录数和需要显示的页数。
  2. 根据每页显示数和当前页数计算出需要显示的数据在数组中的起始和结束位置。
  3. 使用 array_slice() 函数从原数组中截取出需要显示的数据。
  4. 根据分页需求生成分页导航。

代码示例

<?php
// 假设有一个数组
$data = array(
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'
);
// 每页显示 3 条数据
$perPage = 3;
// 当前页码
$page = isset($_GET['page']) ? $_GET['page'] : 1;
// 总记录数
$total = count($data);
// 总页数
$totalPages = ceil($total / $perPage);
// 计算起始位置
$start = ($page - 1) * $perPage;
// 截取需要显示的数据
$dataForPage = array_slice($data, $start, $perPage);

// 遍历需要显示的数据
foreach ($dataForPage as $value) {
    echo $value . '<br>';
}

// 生成分页导航
echo '<div>';
for ($i = 1; $i <= $totalPages; $i++) {
    if ($i == $page) {
        echo $i . '&nbsp;';
    } else {
        echo '<a href="?page=' . $i . '">' . $i . '</a>&nbsp;';
    }
}
echo '</div>';

以上代码将数组分成了多页,每页最多显示 3 条数据,并且在页面底部生成了分页导航。

更复杂的示例

我们可以扩展上面的示例代码,实现更多复杂的功能,比如:

  • 动态传入需要显示的数据和每页显示的数据条数。
  • 分页导航样式定制。
  • 高级分页功能,可根据当前页码动态生成导航,支持前后页、省略号等。

比如下面的代码示例可以实现上面的功能:

<?php
class Pagination {
    private $total;  // 总记录数
    private $perPage;  // 每页显示数
    private $currentPage;  // 当前页码
    private $totalPages;  // 总页数

    private $urlPattern;  // 分页链接格式
    private $ellipsis;   // 省略号
    private $prevLabel;  // 上一页标签
    private $nextLabel;  // 下一页标签

    public function __construct(
        $total,
        $perPage,
        $currentPage = 1,
        $urlPattern = '?page=%d',
        $ellipsis = '...',
        $prevLabel = '上一页',
        $nextLabel = '下一页'
    ) {
        $this->total = $total;
        $this->perPage = $perPage;
        $this->currentPage = $currentPage;
        $this->urlPattern = $urlPattern;
        $this->ellipsis = $ellipsis;
        $this->prevLabel = $prevLabel;
        $this->nextLabel = $nextLabel;

        $this->totalPages = ceil($this->total / $this->perPage);
    }

    public function getData($data) {
        $start = ($this->currentPage - 1) * $this->perPage;
        return array_slice($data, $start, $this->perPage);
    }

    public function getPagination() {
        $html = '';

        // 上一页
        if ($this->currentPage == 1) {
            $html .= '<span class="disabled">' . $this->prevLabel . '</span>';
        } else {
            $prevUrl = sprintf($this->urlPattern, $this->currentPage - 1);
            $html .= '<a href="' . $prevUrl . '">' . $this->prevLabel . '</a>';
        }

        // 首页
        if ($this->currentPage > 5) {
            $html .= '<a href="' . sprintf($this->urlPattern, 1) . '">1</a>';
            if ($this->currentPage > 6) {
                $html .= '<span>' . $this->ellipsis . '</span>';
            }
        }

        // 中间页码
        $start = $this->currentPage - 3 > 1 ? $this->currentPage - 3 : 1;
        $end = $this->currentPage + 3 < $this->totalPages ? $this->currentPage + 3 : $this->totalPages;
        for ($i = $start; $i <= $end; $i++) {
            if ($i == $this->currentPage) {
                $html .= '<span class="active">' . $i . '</span>';
            } else {
                $html .= '<a href="' . sprintf($this->urlPattern, $i) . '">' . $i . '</a>';
            }
        }

        // 尾页
        if ($this->currentPage < $this->totalPages - 4) {
            if ($this->currentPage < $this->totalPages - 5) {
                $html .= '<span>' . $this->ellipsis . '</span>';
            }
            $html .= '<a href="' . sprintf($this->urlPattern, $this->totalPages) . '">' . $this->totalPages . '</a>';
        }

        // 下一页
        if ($this->currentPage == $this->totalPages) {
            $html .= '<span class="disabled">' . $this->nextLabel . '</span>';
        } else {
            $nextUrl = sprintf($this->urlPattern, $this->currentPage + 1);
            $html .= '<a href="' . $nextUrl . '">' . $this->nextLabel . '</a>';
        }

        return $html;
    }
}

// 假设有一个数组
$data = array(
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'
);

// 每页显示 3 条数据
$perPage = 3;

// 当前页码
$page = isset($_GET['page']) ? $_GET['page'] : 1;

// 总记录数
$total = count($data);

// 实例化 Pagination 类
$pagination = new Pagination(
    $total,
    $perPage,
    $page,
    '?page=%d',
    '...',
    '&lt;',
    '&gt;'
);

// 获取需要显示的数据
$dataForPage = $pagination->getData($data);

// 遍历需要显示的数据
foreach ($dataForPage as $value) {
    echo $value . '<br>';
}

// 显示分页导航
echo $pagination->getPagination();

上面的代码实现了分页导航的各种定制功能。可以通过修改构造函数的参数来实现不同的效果。

总结

PHP 数组分页实现方法简单易懂,基本原理也很简单,只需要一些基础的 PHP 数组处理函数和数学运算即可。在实际开发中,我们可以结合类库或框架来实现更多高级的分页功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php数组分页实现方法 - Python技术站

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

相关文章

  • PHP高级编程实例:编写守护进程

    PHP 高级编程实例:编写守护进程 1、守护进程简介 守护进程(Daemons)是在系统后台运行的一种进程,其生命周期通常和操作系统保持一致,常用于长时间运行的进程服务。PHP 也可以使用守护进程模式实现一些需要后台执行的任务。当启动一个守护进程时,需要进行如下几个步骤: 把当前进程脱离控制台,即将父进程退出,子进程独立运行。 改变进程的工作目录,防止进程所…

    PHP 2023年5月24日
    00
  • php中让人头疼的浮点数运算分析

    PHP中让人头疼的浮点数运算分析 在PHP的浮点数运算中,产生不准确结果的问题,常常让人十分头疼。出现这个问题的原因在于,浮点数在计算机内部是以二进制方式存储的,而二进制无法准确地表达所有的十进制数。 问题示例 $a = 0.2; $b = 0.1; $c = $a – $b; echo $c; 这段代码本意是计算0.2 – 0.1的结果,然后输出。不过输出…

    PHP 2023年5月26日
    00
  • php反射类ReflectionClass用法分析

    PHP反射类ReflectionClass用法分析 PHP反射类(ReflectionClass)是PHP内置的一个强大的反射工具,它允许我们在运行时(动态)获取类的元数据信息,包括类的方法、属性、常量等等,同时它还提供了一些强大的功能,如动态方法调用、属性赋值等等。本文将详细分析PHP反射类的用法,并给出两个示例说明其使用方法。 获取类的元数据信息 我们可…

    PHP 2023年5月26日
    00
  • 百度工程师讲PHP函数的实现原理及性能分析(二)

    《百度工程师讲PHP函数的实现原理及性能分析(二)》是一篇介绍PHP函数实现原理和性能分析的技术文章,旨在帮助PHP开发者深入理解函数的工作原理,提高PHP程序的性能。下面是该文章完整攻略。 一、文章概述 本文主要分析PHP函数的实现原理和性能分析,介绍了函数调用栈、函数的参数传递方式、函数的返回值、函数的变量作用域等基础知识。然后详细讲解了PHP函数实现的…

    PHP 2023年5月27日
    00
  • php计算函数执行时间的方法

    要计算PHP函数的执行时间,有许多方法可供选择。以下是其中一些常用的方法: 1.使用microtime函数 1.使用microtime()函数,可以获取当前时间的微秒数,从而计算函数的执行时间。 $start = microtime(true); // 执行一些函数代码… $end = microtime(true); $diff = $end – $s…

    PHP 2023年5月26日
    00
  • 微信小程序什么时候对外开放 小程序上线时间公布及功能介绍

    微信小程序开放时间及功能介绍 微信小程序,简称小程序,是一种全新的开发平台,可以在微信中运行的应用程序。小程序有轻便、快速等特性,又能方便地获取微信的社交功能,成为了开发者关注的热点。 开放时间 微信小程序最初推出于2016年9月,但是一直处于内测阶段。直到2017年1月,微信宣布小程序将于2017年1月下旬正式上线,随后在2017年1月9日正式开放申请。目…

    PHP 2023年5月23日
    00
  • 显示程序执行时间php函数代码

    想要显示程序执行时间,可以使用PHP函数来完成。下面是实现的完整攻略: 步骤一:获取时间戳 PHP中有一个名为microtime()的函数,它能够获取当前时间的微秒级时间戳。我们可以在程序开始和结束的时候调用该函数获取时间戳,然后获取时间差来计算程序的执行时间。 $start_time = microtime(true); // 待计时的代码段 $end_t…

    PHP 2023年5月23日
    00
  • php分页函数完整实例代码

    我来为你详细讲解“php分页函数完整实例代码”的完整攻略。 什么是php分页函数? 在web开发中,经常需要对查询结果进行分页展示。而php分页函数就是一种方便快捷实现分页效果的方法。php分页函数基于传递的当前页码和每页显示的记录数等参数,返回一个已经包含了分页导航条和当前页码所对应的数据查询结果的数组。 如何实现php分页函数? 接下来我将演示如何实现p…

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