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

PHP 陣列分頁實作:自訂函式與 array_slice 兩種做法

     編輯:PHP 相關知識

PHP 陣列分頁:從手寫函式到內建函式的進化

當資料已完整載入記憶體(如 API 回傳、快取資料)時,可在 PHP 端對陣列進行分頁。本文比較自訂分頁函式與 array_slice() 兩種做法,並討論效能考量。

方法一:自訂分頁函式

<?php
function page($array, $pagesize, $current) {
    $total = ceil(count($array) / $pagesize);          // 總頁數
    $prev = ($current - 1) <= 0 ? 1 : ($current - 1);  // 上一頁
    $next = ($current + 1) >= $total ? $total : $current + 1; // 下一頁
    $current = $current > $total ? $total : $current;  // 修正當前頁
    $start = ($current - 1) * $pagesize;               // 起始索引

    $data = array();
    for ($i = $start; $i < $start + $pagesize && $i < count($array); $i++) {
        $data[] = $array[$i];
    }

    return array(
        'source' => $data,
        'page' => "<a href='?page=1'>首頁</a> " .
                  "<a href='?page=$prev'>上一頁</a> " .
                  "<a href='?page=$next'>下一頁</a> " .
                  "<a href='?page=$total'>尾頁</a>"
    );
}

// 使用範例
$array = range(1, 20);
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$result = page($array, 5, $page);

foreach ($result['source'] as $item) {
    echo $item . ' ';
}
echo $result['page'];
?>

方法二:使用 array_slice()(推薦)

<?php
$array = range(1, 20);
$pagesize = 5;
$page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1;

$offset = ($page - 1) * $pagesize;
$pageData = array_slice($array, $offset, $pagesize, true); // true 保留鍵名

// 顯示資料
foreach ($pageData as $item) echo $item . ' ';

// 簡易分頁連結
$total = ceil(count($array) / $pagesize);
for ($i = 1; $i <= $total; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}
?>

效能與架構建議

注意:若資料來源為資料庫,務必在 SQL 層面用 LIMIT/OFFSET 分頁,避免將大量資料載入記憶體再切片。PHP 端分頁僅適合資料量較小(如 < 10,000 筆)且已須完整載入的場景。

前端替代方案:JS 分頁

若資料量中等(數百筆),可一次輸出完整資料到前端,再用 JavaScript(如 DataTables、Vue、React)做分頁渲染,減少伺服器往返,提升使用者體驗。

常見問題

Q: 刪除陣列元素後索引不連續怎麼辦?
A: 使用 array_values($arr) 重新建立數字索引,或用 array_splice($arr, $index, 1) 刪除並自動重排索引。
Q: 二維陣列刪除後如何保持索引順序?
A: $newArr = array_values($arr); 或 sort($arr);(會重新排序)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved