当前位置: 首页> 最新文章列表> 在CMS中用 array_slice 实现文章分类分页

在CMS中用 array_slice 实现文章分类分页

gitbox 2025-05-26

一、分页原理简述

假设我们有一个数组,包含某个分类下的所有文章。分页的核心是根据当前页码和每页显示的条数,从数组中截取对应的数据片段。

分页参数通常包括:

  • $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 对文章分类分页的需求。

这种方法不依赖数据库分页,适合数据量较小或已将数据预先加载到数组中的场景。对于数据量大时,建议使用数据库的分页查询提高效率。