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

PHP 簡易分頁類實作與邏輯解析

     編輯:PHP 綜合知識

分頁類設計目標

根據目前頁碼、總資料筆數、顯示頁碼數量與每頁筆數,計算出需顯示的頁碼範圍陣列,支援首頁、尾頁、中間頁碼的智慧型截取邏輯。

核心程式碼

class PageModel {
    /**
     * 取得分頁陣列
     * @param int $page 目前頁碼
     * @param int $goodsCount 總資料筆數
     * @param int $pageCountLength 顯示頁碼數量
     * @param int $pageLength 每頁筆數
     * @return array 頁碼陣列
     */
    public static function getPageArr($page, $goodsCount, $pageCountLength, $pageLength) {
        // 總頁數
        $allPageCount = ceil($goodsCount / $pageLength);
        
        // 總頁數小於等於顯示長度,直接輸出所有頁碼
        if ($allPageCount <= $pageCountLength) {
            $arr = [];
            for ($i = 0; $i < $allPageCount; $i++) {
                $arr[] = ['page' => $i + 1];
            }
            return $arr;
        }
        
        $halfLength = floor($pageCountLength / 2);
        
        // 目前頁碼在前半段,顯示前 N 頁
        if ($page <= $halfLength) {
            $arr = [];
            for ($i = 0; $i < $pageCountLength; $i++) {
                $arr[] = ['page' => $i + 1];
            }
            return $arr;
        }
        
        // 目前頁碼在尾段,顯示後 N 頁
        if ($page > $allPageCount - floor($pageCountLength / 2)) {
            $arr = [];
            for ($i = -$pageCountLength; $i < 0; $i++) {
                $arr[] = ['page' => $allPageCount + $i + 1];
            }
            return $arr;
        }
        
        // 中間段:以目前頁碼為中心兩側擴展
        $arr = [];
        for ($i = -$halfLength; $i < $pageCountLength - $halfLength; $i++) {
            $arr[] = ['page' => $page + $i];
        }
        return $arr;
    }
}

邏輯流程圖解

  1. 計算總頁數:ceil(總筆數 / 每頁筆數)
  2. 邊界判斷:
    • 總頁數 ≤ 顯示長度 → 全部顯示
    • 目前頁 ≤ 半長 → 顯示首段
    • 目前頁 > 總頁數 - 半長 → 顯示尾段
    • 其餘 → 以目前頁為中心對稱顯示
  3. 回傳格式:[['page'=>1], ['page'=>2], ...] 方便前端模板迴圈渲染

使用範例

// 總共 105 筆資料,每頁 10 筆,顯示 7 個頁碼,目前在第 3 頁
$pages = PageModel::getPageArr(3, 105, 7, 10);
// 輸出:頁碼 1~7

// 目前在第 10 頁(總 11 頁)
$pages = PageModel::getPageArr(10, 105, 7, 10);
// 輸出:頁碼 5~11

擴充建議

  • 加入 prev/next/first/last 旗標
  • 支援 URL 參數自動組合(如 ?page=3&sort=desc)
  • 整合 Bootstrap / Tailwind CSS 樣式類別
  • 加入快取機制避免重複計算

此分頁類邏輯清晰、無外部依賴,適合輕量級專案或教學參考,生產環境建議搭配成熟框架內建分頁元件使用。

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