在 Web 开发中,分页是常见的功能之一。无论是展示文章列表、产品目录还是用户评论,为了避免一次性加载过多数据导致页面加载缓慢,分页都是一种高效的解决方案。
PHP 提供了一个非常实用的函数 array_slice(),它可以方便地从数组中提取出一部分元素。结合这个函数,我们可以轻松地实现一个基础的数组分页导航功能。本文将带你一步一步实现它。
array_slice() 的基本语法如下:
array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
$array:原始数组
$offset:开始位置(从 0 开始)
$length:可选参数,返回的元素数量
$preserve_keys:是否保留原来的键名,默认为 false
假设我们有一个包含若干文章标题的数组:
$articles = [
"文章一", "文章二", "文章三", "文章四", "文章五",
"文章六", "文章七", "文章八", "文章九", "文章十"
];
我们希望每页显示 3 篇文章。
首先,我们需要知道当前是第几页,然后根据页码计算出对应的偏移量。
<?php
$articles = [
"文章一", "文章二", "文章三", "文章四", "文章五",
"文章六", "文章七", "文章八", "文章九", "文章十"
];
$perPage = 3;
$totalArticles = count($articles);
$totalPages = ceil($totalArticles / $perPage);
// 获取当前页码
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
if ($page < 1) $page = 1;
if ($page > $totalPages) $page = $totalPages;
// 计算当前页的偏移量
$offset = ($page - 1) * $perPage;
// 使用 array_slice 获取当前页的数据
$currentPageArticles = array_slice($articles, $offset, $perPage);
?>
接着,我们将当前页的数据输出到页面中:
<ul>
<?php foreach ($currentPageArticles as $article): ?>
<li><?php echo htmlspecialchars($article); ?></li>
<?php endforeach; ?>
</ul>
我们还需要在页面底部添加翻页链接:
<div class="pagination">
<?php if ($page > 1): ?>
<a href="https://gitbox.net/pagination.php?page=<?php echo $page - 1; ?>">上一页</a>
<?php endif; ?>
<?php for ($i = 1; $i <= $totalPages; $i++): ?>
<?php if ($i == $page): ?>
<strong><?php echo $i; ?></strong>
<?php else: ?>
<a href="https://gitbox.net/pagination.php?page=<?php echo $i; ?>"><?php echo $i; ?></a>
<?php endif; ?>
<?php endfor; ?>
<?php if ($page < $totalPages): ?>
<a href="https://gitbox.net/pagination.php?page=<?php echo $page + 1; ?>">下一页</a>
<?php endif; ?>
</div>
通过 array_slice() 和一些基础的分页逻辑,我们就可以为任意的数组内容添加分页功能。这种方式适用于数据量不大、无需数据库操作的场景,比如静态内容列表、缓存中的数据或配置项展示等。对于更大规模的数据,建议使用数据库的 LIMIT 子句进行分页查询。
掌握 array_slice(),是你构建高效 PHP 应用的重要一步。希望本文对你有所帮助!