假设我们有一个数组,包含某个分类下的所有文章。分页的核心是根据当前页码和每页显示的条数,从数组中截取对应的数据片段。
分页参数通常包括:
$page:当前页码
$pageSize:每页显示的文章数
$offset:偏移量,计算方式是 ($page - 1) * $pageSize
利用 array_slice,我们可以从文章数组中截取 $offset 开始的 $pageSize 条文章,从而实现分页。
下面是一个简单示例,展示如何用 array_slice 实现文章分类分页。
<?php
// 模拟分类下所有文章数组
$articles = [
['id' => 1, 'title' => '文章一', 'category' => '科技'],
['id' => 2, 'title' => '文章二', 'category' => '科技'],
['id' => 3, 'title' => '文章三', 'category' => '生活'],
['id' => 4, 'title' => '文章四', 'category' => '科技'],
['id' => 5, 'title' => '文章五', 'category' => '生活'],
['id' => 6, 'title' => '文章六', 'category' => '科技'],
['id' => 7, 'title' => '文章七', 'category' => '科技'],
];
// 选择分类
$category = '科技';
// 过滤出当前分类的文章
$categoryArticles = array_filter($articles, function ($article) use ($category) {
return $article['category'] === $category;
});
// 重建索引,方便使用 array_slice
$categoryArticles = array_values($categoryArticles);
// 当前页码,从 URL 获取,默认第 1 页
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
// 每页显示文章数
$pageSize = 3;
// 计算偏移量
$offset = ($page - 1) * $pageSize;
// 截取当前页的文章
$currentPageArticles = array_slice($categoryArticles, $offset, $pageSize);
// 输出当前页文章
foreach ($currentPageArticles as $article) {
echo "<h3>" . htmlspecialchars($article['title']) . "</h3>";
}
?>
分页不仅要显示内容,还要给用户提供切换页面的导航。可以基于总文章数计算总页数,并动态生成分页链接。
<?php
$totalArticles = count($categoryArticles);
$totalPages = ceil($totalArticles / $pageSize);
for ($i = 1; $i <= $totalPages; $i++) {
if ($i == $page) {
echo "<strong>$i</strong> ";
} else {
echo "<a href=\"http://gitbox.net/yourcms?page=$i\">$i</a> ";
}
}
?>
这里用到了 http://gitbox.net 作为示例域名,您可以根据实际情况替换。
利用 PHP 的 array_slice 函数,可以非常方便地实现数组数据的分页,适用于分类文章的分页展示。关键在于正确计算偏移量,结合分类过滤后对数组进行切片。再加上简单的分页导航,即可满足大多数 CMS 对文章分类分页的需求。
这种方法不依赖数据库分页,适合数据量较小或已将数据预先加载到数组中的场景。对于数据量大时,建议使用数据库的分页查询提高效率。