帮我用php写一个分页,要求:每页5个数据,一共1000个数据,最多只能显示十个页码
时间: 2024-05-14 20:16:41 浏览: 8
好的,以下是你需要的代码:
```php
<?php
$total_data = 1000; // 总数据量
$per_page = 5; // 每页显示的数据量
$page_nums = 10; // 最多显示的页码数
$current_page = isset($_GET['page']) ? $_GET['page'] : 1; // 当前页码
$total_page = ceil($total_data / $per_page); // 总页数
// 当前页码小于1时,强制置为1
if ($current_page < 1) {
$current_page = 1;
}
// 当前页码大于总页数时,强制置为总页数
if ($current_page > $total_page) {
$current_page = $total_page;
}
// 计算上一页和下一页的页码
$prev_page = $current_page - 1;
$next_page = $current_page + 1;
// 计算起始数据的偏移量
$offset = ($current_page - 1) * $per_page;
// 查询数据库,获取当前页需要显示的数据
// 假设数据表名为 'data_table',数据字段为 'data_field'
// $sql = "SELECT `data_field` FROM `data_table` LIMIT $offset, $per_page";
// $result = $conn->query($sql);
// 此处省略查询数据库的代码
// 输出当前页需要显示的数据
// while ($row = $result->fetch_assoc()) {
// echo $row['data_field'];
// }
// 此处省略输出数据的代码
// 生成页码
$start_page = $current_page - floor($page_nums / 2); // 起始页码
$end_page = $current_page + floor($page_nums / 2); // 结束页码
if ($start_page < 1) {
$start_page = 1;
$end_page = $page_nums;
}
if ($end_page > $total_page) {
$end_page = $total_page;
$start_page = $total_page - $page_nums + 1;
if ($start_page < 1) {
$start_page = 1;
}
}
// 输出页码
echo "<div>";
echo "<a href=\"?page=$prev_page\">上一页</a>";
for ($i = $start_page; $i <= $end_page; $i++) {
if ($i == $current_page) {
echo "<a href=\"?page=$i\" style=\"font-weight:bold;\">$i</a>";
} else {
echo "<a href=\"?page=$i\">$i</a>";
}
}
echo "<a href=\"?page=$next_page\">下一页</a>";
echo "</div>";
?>
```
以上代码采用了 GET 方式传递页码,每次请求会重新查询数据库获取数据,这会导致性能较差。实际情况下,可以采用缓存等方法优化查询效率。