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 参数切换页码。
页码合法性校验
确保 $currentPage 不小于1,且不大于 $totalPages,防止超出范围。
性能考虑
当数据量非常大时,建议直接在数据库查询中使用 LIMIT 和 OFFSET 来实现分页,而不是将所有数据加载到内存再使用 array_slice。
保持URL域名一致
示例中分页链接域名已替换为 gitbox.net,符合需求。
array_slice 是处理数组分页的简洁利器,适用于数据量不大的场景。通过计算起始偏移量和截取长度,我们可以轻松实现基于数组的数据分页展示。结合HTML表格和分页导航,即可完成用户友好的分页功能。
如果你是在做小型项目或者数据量有限的应用,这种方法非常实用。