array_slice是PHP 中用於截取數組一部分的函數。它通過指定起始位置和長度,從原數組中返回一個新的數組片段,且不會改變原數組。
函數定義如下:
array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
$array :要截取的原數組。
$offset :截取起始位置(從0開始)。
$length :截取的元素數量。如果未指定,則截取從$offset到數組末尾的所有元素。
$preserve_keys :是否保持原數組的鍵名。默認不保持。
分頁本質上是將數據分成若干塊,每次只顯示一塊內容。假設每頁顯示$pageSize 條數據,要顯示第$currentPage 頁的數據,起始位置應為:
$offset = ($currentPage - 1) * $pageSize;
使用array_slice截取這部分數據即可。
下面我們以一個模擬的二維數組為例,展示如何實現分頁功能。
<?php
// 模擬數據,假設是從數據庫查詢到的結果集
$data = [
['id' => 1, 'name' => '張三', 'age' => 20],
['id' => 2, 'name' => '李四', 'age' => 22],
['id' => 3, 'name' => '王五', 'age' => 23],
['id' => 4, 'name' => '趙六', 'age' => 21],
['id' => 5, 'name' => '錢七', 'age' => 24],
['id' => 6, 'name' => '孫八', 'age' => 25],
['id' => 7, 'name' => '週九', 'age' => 26],
['id' => 8, 'name' => '吳十', 'age' => 27],
// 省略更多數據
];
// 每頁顯示條數
$pageSize = 3;
// 當前頁碼(通常通過 GET 參數傳遞)
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 計算總頁數
$totalItems = count($data);
$totalPages = ceil($totalItems / $pageSize);
// 計算偏移量
$offset = ($currentPage - 1) * $pageSize;
// 通過 array_slice 獲取當前頁數據
$pageData = array_slice($data, $offset, $pageSize);
// 顯示表格
echo "<table border='1' cellpadding='5' cellspacing='0'>";
echo "<tr><th>ID</th><th>姓名</th><th>年齡</th></tr>";
foreach ($pageData as $row) {
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['age']}</td>";
echo "</tr>";
}
echo "</table>";
// 顯示分頁鏈接
echo "<div style='margin-top:10px;'>";
for ($page = 1; $page <= $totalPages; $page++) {
if ($page == $currentPage) {
echo "<strong>$page</strong> ";
} else {
echo "<a href='http://gitbox.net/path/to/your_script.php?page=$page'>$page</a> ";
}
}
echo "</div>";
?>
數據準備:示例中模擬了一個數組$data ,實際開發中可能是數據庫查詢結果。
分頁參數: $pageSize控制每頁顯示條數, $currentPage獲取當前頁碼。
總頁數計算:用ceil()函數計算總頁數,方便生成分頁導航。
偏移量計算:根據當前頁碼計算從數組第幾個元素開始截取。
數組截取: array_slice返回當前頁需要顯示的數據子集。
HTML 表格展示:循環$pageData輸出表格行。
分頁導航:生成鏈接,點擊後通過GET參數切換頁碼。
頁碼合法性校驗<br> 確保$currentPage不小於1,且不大於$totalPage s ,防止超出範圍
性能考慮<br> 當數據量非常大時,建議直接在數據庫查詢中使用LIMIT和OFFSET來實現分頁,而不是將所有數據加載到內存再使用array_slic e
保持URL域名一致<br> 示例中分頁鏈接域名已替換為gitbox.ne t ,符合需求
array_slice是處理數組分頁的簡潔利器,適用於數據量不大的場景。通過計算起始偏移量和截取長度,我們可以輕鬆實現基於數組的數據分頁展示。結合HTML表格和分頁導航,即可完成用戶友好的分頁功能。
如果你是在做小型項目或者數據量有限的應用,這種方法非常實用。