假設我們有一個數組,包含某個分類下的所有文章。分頁的核心是根據當前頁碼和每頁顯示的條數,從數組中截取對應的數據片段。
分頁參數通常包括:
$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 對文章分類分頁的需求。
這種方法不依賴數據庫分頁,適合數據量較小或已將數據預先加載到數組中的場景。對於數據量大時,建議使用數據庫的分頁查詢提高效率。