您的位置:首页 > 编程语言 > PHP开发

PHP分页函数

2017-06-18 23:29 309 查看
我们经常会从数据库里读取的数据显示出来,当数据行较多时就需要把数据分页显示。

这里写了一个通用的分页函数:
paging.func.php


<?php
/**
* 数据分页函数
* @param integer $count     数据总行数
* @param integer $showCount 显示行数
* @param integer $index     当前页号
* @param integer $navCount  导航最大项数
* @return array(
*    'curIndex' => 当前页号,
*    'pageCount' => 总页数,
*    'beginIndex' => 当前页开始行,
*    'endIndex' => 当前页结束行,
*    'count' => 数据行数,
*    'nav' => array(
*        'curIndex' => 当前页号,
*        'beginIndex' => 分页导航开始页,
*        'endIndex' => 分页导航结束页,
*        'prevIndex' => 上一页,
*        'nextIndex' => 下一页,
*        'firstIndex' => 首页,
*        'lastIndex' => 尾页,
*    )
* )
*/
function Paging($count, $showCount, $index, $navCount){
$pageCount = (integer)($count / $showCount);
if($count % $showCount){
$pageCount += 1;
}
$beginIndex = $index * $showCount;
$endIndex = $beginIndex + $showCount;
if($endIndex > $count){
$endIndex = $count;
}
$ret = array(
'pageCount' => $pageCount,
'curIndex' => $index,
'beginIndex' => $beginIndex,
'endIndex' => $endIndex,
'count' => $count,
);

$beginIndex = $index - (integer)($navCount / 2);
if($beginIndex < 0){
$beginIndex = 0;
}
$endIndex = $beginIndex + $navCount;
if($endIndex > $pageCount){
$endIndex = $pageCount;
$beginIndex = max(0, $endIndex - $navCount);
}

$ret['nav'] = array(
'beginIndex' => $beginIndex,
'endIndex' => $endIndex,
'curIndex' => $index,
'prevIndex' => max(0, $index - 1),
'nextIndex' => min($pageCount, $index + 1),
'firstIndex' => 0,
'lastIndex' => $pageCount - 1,
);
return $ret;
}
?>


使用例子:
test-paging.php


<?php
require 'paging.func.php';

/**
* 随机生成字符串
* @param string $length 字符串长度
*/
function RandomString($length){
static $range = '0123456789qwertyuiopasdfghjklzxcvbnm';
$rangeLen = strlen($range);
$string = '';
for($i = 0 ; $i < $length; ++ $i){
$string .= $range[mt_rand(0, $rangeLen - 1)];
}
return $string;
}

/**
* 查询数据
* @param integer $count 数据表行数
*/
function QueryData($count){
for($i = 0; $i < $count; ++ $i){
$data[$i] = array(
'id' => ($i + 1000),
'name' => RandomString(mt_rand(4, 10)),
);
}
return $data;
}

/**
* 显示数据表
* @param  array   $data      数据表
* @param  integer $showCount 每页行数
* @param  integer $count     总行数
* @param  integer $index     当前页号
* @param  integer $navCount  导航显示页数
*/
function showData($data, $showCount, $count, $index, $navCount){
$pag = Paging($count, $showCount, $index, $navCount);
echo "<table>";
echo "<tr><th>id</th><th>name</td><tr>";
for($i = $pag['beginIndex']; $i < $pag['endIndex']; ++ $i){
$row = &$data[$i];
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['name']}</td>";
echo "</tr>";
}
echo "</table>";

echo "</div>";
$nav = &$pag['nav'];
if(0 < $pag['curIndex']){
echo " <a href='?index={$nav['firstIndex']}'>首页</a>";
echo " <a href='?index={$nav['prevIndex']}'>上一页</a>";
}
for($i = $nav['beginIndex']; $i < $nav['endIndex']; ++ $i){
$showNum = $i + 1;
if($i == $index){
echo " <span>{$showNum}</span>";
}else{
echo " <a href='?index={$i}'><b>{$showNum}</b></a>";
}
}
if($pag['curIndex'] + 1 < $pag['pageCount']){
echo " <a href='?index={$nav['nextIndex']}'>下一页</a>";
echo " <a href='?index={$nav['lastIndex']}'>尾页</a>";
}
echo " 总{$pag['pageCount']}页 {$pag['count']}条";
echo "</div>";
}

$data = QueryData(75);
$index = isset($_REQUEST['index']) ? $_REQUEST['index'] : 0;
showData($data, 10, 75, $index, 5);
?>


测试截图:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息