php分页实现类库实现
PHP 分页实现方法
在PHP中实现分页功能,可以通过原生代码或第三方类库完成。以下是几种常见实现方式:
原生PHP实现分页
通过MySQL的LIMIT子句结合PHP计算实现基础分页:
// 获取当前页码
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10; // 每页显示数量
$offset = ($page - 1) * $perPage;
// 查询数据
$sql = "SELECT * FROM table_name LIMIT $offset, $perPage";
$result = $conn->query($sql);
// 计算总页数
$totalRows = $conn->query("SELECT COUNT(*) FROM table_name")->fetch_row()[0];
$totalPages = ceil($totalRows / $perPage);
// 生成分页链接
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
使用第三方类库
1. Pagerfanta
一个流行的分页库,支持多种数据源(Doctrine、Eloquent等)。
安装:
composer require pagerfanta/pagerfanta
示例代码:

use Pagerfanta\Pagerfanta;
use Pagerfanta\Adapter\ArrayAdapter;
$adapter = new ArrayAdapter($yourDataArray); // 支持数组或数据库适配器
$pagerfanta = new Pagerfanta($adapter);
$pagerfanta->setMaxPerPage(10); // 每页数量
$pagerfanta->setCurrentPage($currentPage); // 当前页码
// 获取当前页数据
$currentPageResults = $pagerfanta->getCurrentPageResults();
// 渲染分页导航
echo $pagerfanta->getNextPage(); // 下一页页码
2. KnpPaginatorBundle(Symfony专用)
适用于Symfony框架的分页组件。
安装:
composer require knplabs/knp-paginator-bundle
控制器示例:

use Knp\Component\Pager\PaginatorInterface;
public function listAction(PaginatorInterface $paginator, Request $request) {
$query = $entityManager->createQuery('SELECT a FROM App\Entity\Article a');
$pagination = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
10 // 每页数量
);
return $this->render('list.html.twig', ['pagination' => $pagination]);
}
模板中渲染:
{{ knp_pagination_render(pagination) }}
3. Laravel分页(内置)
Laravel框架已内置分页功能:
$users = DB::table('users')->paginate(15); // 每页15条
return view('user.index', ['users' => $users]);
模板中显示分页链接:
{{ $users->links() }}
分页样式优化
多数类库支持自定义模板:
- Pagerfanta:通过
$pagerfanta->setDefaultView('twitter_bootstrap')指定模板 - KnpPaginator:通过Twig模板覆盖默认样式
- Laravel:使用
php artisan vendor:publish发布视图文件后修改
性能注意事项
- 大数据表分页时避免使用
COUNT(*),可考虑缓存总行数 - 使用索引优化
LIMIT查询效率 - 前端可通过AJAX实现无刷新分页
以上方法可根据项目需求选择,框架项目优先使用内置分页组件,裸PHP项目可选择Pagerfanta等通用库。





