首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 翻頁功能兩種實現模式:簡易雙向與數字循環分頁

     編輯:PHP 綜合知識

根據資料量與 UX 需求,分頁可分為簡易「上一頁/下一頁」與進階「數字循環分頁」兩種模式。本文對比兩者實現邏輯與適用場景。

模式一:簡易雙向翻頁

適用於資料量中等、無需跳轉特定頁的場景。

核心變量

  • $limit:每頁筆數(固定)
  • $start:當前偏移量(動態變化)

邏輯流程

$limit = 20;
$start = isset($_GET['start']) ? max(0, intval($_GET['start'])) : 0;

// 總筆數
$total = mysql_result(mysql_query("SELECT COUNT(*) FROM `table`"), 0);

// 當前頁數據
$data = mysql_query("SELECT * FROM `table` ORDER BY id DESC LIMIT {$start}, {$limit}");

// 導航邏輯
$prev = $start - $limit;
$next = $start + $limit;

if ($prev >= 0) echo '上一頁 ';
if ($next < $total) echo '下一頁';

模式二:數字循環分頁

適用於資料量大、需快速跳轉的場景(如論壇、文章列表)。

關鍵參數

  • $pageSize:每頁筆數(如 25)
  • $pageGroup:每組顯示頁碼數(如 20)

分組邏輯推導

頁碼分組公式:$group = floor(($page-1) / $pageGroup)

  • 第 0 組:頁 1~20
  • 第 1 組:頁 21~40
  • 組間跳轉透過 $start = $group * $pageGroup * $pageSize 計算

核心代碼片段

$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
$pageSize = 25;
$pageGroup = 20;

$total = mysql_result(mysql_query("SELECT COUNT(*) FROM `table`"), 0);
$totalPages = ceil($total / $pageSize);

// 當前組別
$group = floor(($page - 1) / $pageGroup);
$groupStartPage = $group * $pageGroup + 1;
$groupEndPage = min($groupStartPage + $pageGroup - 1, $totalPages);

// 輸出頁碼
for ($p = $groupStartPage; $p <= $groupEndPage; $p++) {
    if ($p == $page) echo "{$p} ";
    else echo ''.$p.' ';
}

// 組間導航
if ($group > 0) {
    $prevGroupLastPage = $groupStartPage - 1;
    echo '« 前'.$pageGroup.'頁 ';
}
if ($groupEndPage < $totalPages) {
    $nextGroupFirstPage = $groupEndPage + 1;
    echo '後'.$pageGroup.'頁 »';
}

模式對比與選型建議

維度簡易雙向數字循環
實現複雜度低中
跳轉效率O(N) 逐頁O(1) 組間跳轉
適用資料量< 50 頁> 50 頁
用戶體驗基礎優

現代化建議:新專案採用前端分頁組件(如 Vue/React Pagination)+ 後端 API 回傳 {data, total, page, pageSize},分離顯示邏輯與資料邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved