/**
* 生成类似百度分页
* @param 页码长度 目前的页码 最大的页码
* @return array 页码的数组
*/
function getPageNum($pageLength,$nowPage,$maxPage){
// 数组,用来容纳分页页码的数字
$pageNumArray = array($nowPage);
// 页码的偏移量
$offset = 0;
while(true){
// 用来标识还有没有分页需要添加
$bool = true;
$offset++;
if(count($pageNumArray)>=$pageLength)break;
// 让偏移量自增
if(($nowPage-$offset)>0){
// 往数组里面添加当前页前的页码数字
array_unshift($pageNumArray,$nowPage-$offset);
$bool = false;
}
if(count($pageNumArray)>=$pageLength)break;
if(($nowPage+$offset)<=$maxPage){
// 往数组里面添加当前页后的页码数字
array_push($pageNumArray,$nowPage+$offset);
$bool = false;
}
if($bool)break;
}
// 获取上一页和下一页
$pageNumArrayFlip = array_flip($pageNumArray);
$nowIndex = $pageNumArrayFlip[$nowPage];
$prevPage = isset($pageNumArray[$nowIndex-1]) ? ($pageNumArray[$nowIndex-1]) : false;
$nextPage = isset($pageNumArray[$nowIndex+1]) ? ($pageNumArray[$nowIndex+1]) : false;
array_unshift($pageNumArray, $prevPage);
array_push($pageNumArray, $nextPage);
return $pageNumArray;
}
调用:
$maxPage = 100;
$nowPage = isset($_GET['nowPage']) ? $_GET['nowPage'] : 1;
$pageLength = 10;
$res = getPageNum($pageLength,$nowPage,$maxPage);
echo "<pre>";
print_r($res);
案例: