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

PHP 使用陣列函數實現分頁功能完整教學

     編輯:PHP 相關知識

PHP 陣列分頁實作:輕鬆掌握核心邏輯

在 PHP 開發中,分頁是處理大量資料時的基本功。雖然現代框架都內建分頁元件,但理解原生陣列分頁的核心邏輯,有助於在特殊情況下快速實作或除錯。本文將詳細解析如何使用 PHP 陣列函數實作分頁功能。

核心分頁函數解析

以下是一個完整的分頁函數,接受三個參數:資料陣列、每頁筆數、目前頁碼:

<?php
function paginate(array $items, int $perPage, int $currentPage = 1): array {
    // 計算總頁數
    $totalPages = (int) ceil(count($items) / $perPage);
    
    // 修正頁碼範圍
    $currentPage = max(1, min($currentPage, $totalPages));
    
    // 計算資料切片範圍
    $offset = ($currentPage - 1) * $perPage;
    $pagedItems = array_slice($items, $offset, $perPage);
    
    // 產生導航連結
    $prevPage = $currentPage > 1 ? $currentPage - 1 : 1;
    $nextPage = $currentPage < $totalPages ? $currentPage + 1 : $totalPages;
    
    $navigation = sprintf(
        '<a href="?page=1">首頁</a> ' .
        '<a href="?page=%d">上一頁</a> ' .
        '<a href="?page=%d">下一頁</a> ' .
        '<a href="?page=%d">末頁</a>',
        $prevPage, $nextPage, $totalPages
    );
    
    return [
        'data' => $pagedItems,
        'pagination' => [
            'current_page' => $currentPage,
            'per_page' => $perPage,
            'total_pages' => $totalPages,
            'total_items' => count($items),
            'navigation' => $navigation
        ]
    ];
}

實際應用範例

以下示範如何使用上述函數處理 20 筆測試資料:

<?php
// 模擬資料來源
$data = range(1, 20);

// 從 URL 取得頁碼,預設為第 1 頁
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// 呼叫分頁函數
$result = paginate($data, 5, $page);

// 輸出當頁資料
echo "<h3>第 {$result['pagination']['current_page']} 頁資料</h3>";
echo "<ul>";
foreach ($result['data'] as $item) {
    echo "<li>項目 {$item}</li>";
}
echo "</ul>";

// 輸出分頁導航
echo $result['pagination']['navigation'];

進階優化建議

  • 資料來源優化:實際專案中應搭配資料庫的 LIMIT 和 OFFSET,避免一次撈取所有資料再切片
  • 快取機制:靜態資料可考慮快取分頁結果,減少重複運算
  • SEO 友善:使用語意化 HTML 結構,並加入 rel="prev/next" 標籤
  • API 回應格式:若為 API 介面,建議回傳 JSON 格式,包含 meta 和 links 物件

常見陷阱提醒

  1. 頁碼驗證:務必檢查頁碼是否為正整數,防止 SQL 注入或邏輯錯誤
  2. 空資料處理:總筆數為 0 時,總頁數應為 0 或 1,避免除以零錯誤
  3. 大數據效能:資料量超過萬筆時,建議改用游標分頁或 Keyset Pagination

掌握陣列分頁核心邏輯後,您可以根據專案需求靈活調整,或作為理解框架內建分頁機制的基礎。

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