数据分页函数的编写

编写思路:
1.分页函数能够帮助咱们完成select语句的limit部分php

每页显示3条
limit ($_GET[$page]-1)*$page_size,$page_size //第一页 0,3
limit ($_GET[$page]-1)*$page_size,$page_size //第二页 3,3
limit ($_GET[$page]-1)*$page_size,$page_size //第三页 6,3html


2.分页函数应该帮助咱们设置好页码列表的html代码部分
(1)根据传入函数的$num_btn参数来显示按钮数目
1)要显示的按钮数目$num_btn大于总页码数目$page_num_all
2)$num_btn<$page_num_all
这种状况下咱们有一种显示策略是:
理想状态:当前页的左边按钮数目应该和右边的按钮数目相等,或者右边多一个按钮
不理想的状况:一、左边第一个按钮号已是<1了
                          二、最后一个按钮号已是大于总页码数$page_num_all数组

if($num_btn>=$page_num_all){ //把全部的页码按钮所有显示
        for($i=1;$i<=$page_num_all;$i++){//这边的$page_num_all是限制循环次数以控制显示按钮数目的变量,$i是记录页码号
            if($_GET[$page]==$i){ $html[$i]="<span>{$i}</span>"; }else{ $html[$i]="<a href='{$url}{$i}'>{$i}</a>"; } } }else{ $num_left=floor(($num_btn-1)/2); $start=$_GET[$page]-$num_left; $end=$start+($num_btn-1); if($start<1){ $start=1; } if($end>$page_num_all){ $start=$page_num_all-($num_btn-1); } for($i=0;$i<$num_btn;$i++){ if($_GET[$page]==$start){ $html[$start]="<span>{$start}</span>"; }else{ $html[$start]="<a href='{$url}{$start}'>{$start}</a>"; } $start++; } }

(2)当按钮数目大于等于3的时候作省略号效果:
         当第一个按钮的页码不是1的时候,咱们就把第一个按钮替换成1...
         当最后一个按钮的页码不是$page_num_all的时候,咱们就把最后一个按钮替换成...$page_num_all
函数

if(count($html)>=3){ reset($html); $key_first=key($html); end($html); $key_end=key($html); if($key_first!=1){ array_shift($html); array_unshift($html,"<a href='{$url}1'>1...</a>"); } if($key_end!=$page_num_all){ array_pop($html); array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>"); } }

全部功能实现后php代码以下:ui

<?php header("Content-type:text/html;charset=utf-8"); /* 参数说明: $count:总记录数 $page_size:每页显示的记录数 $num_btn:要展现的页码按钮数目 $page:分页的get参数 */
function page($count,$page_size,$num_btn=10,$page='page'){ if(!isset($_GET[$page]) || !is_numeric($_GET[$page]) || $_GET[$page]<1){ $_GET[$page]=1; } //总页数
    $page_num_all=ceil($count/$page_size); if($_GET[$page]>$page_num_all){ $_GET[$page]=$page_num_all; } $start=($_GET[$page]-1)*$page_size; $limit="limit {$start},{$page_size}"; $current_url=$_SERVER['REQUEST_URI'];//获取当前界面url地址
    $arr_current=parse_url($current_url);//将当前url拆分到数组中
    $current_path=$arr_current['path'];//将文件路径保存起来
    $url=''; if(isset($arr_current['query'])){ parse_str($arr_current['query'],$arr_query); unset($arr_query[$page]); if(empty($arr_query)){ $url="{$current_path}?{$page}="; }else{ $other=http_build_query($arr_query); $url="{$current_path}?{$other}&{$page}="; } }else{ $url="{$current_path}?{$page}="; } $html=array(); if($num_btn>=$page_num_all){ //把全部的页码按钮所有显示
        for($i=1;$i<=$page_num_all;$i++){//这边的$page_num_all是限制循环次数以控制显示按钮数目的变量,$i是记录页码号
            if($_GET[$page]==$i){ $html[$i]="<span>{$i}</span>"; }else{ $html[$i]="<a href='{$url}{$i}'>{$i}</a>"; } } }else{ $num_left=floor(($num_btn-1)/2); $start=$_GET[$page]-$num_left; $end=$start+($num_btn-1); if($start<1){ $start=1; } if($end>$page_num_all){ $start=$page_num_all-($num_btn-1); } for($i=0;$i<$num_btn;$i++){ if($_GET[$page]==$start){ $html[$start]="<span>{$start}</span>"; }else{ $html[$start]="<a href='{$url}{$start}'>{$start}</a>"; } $start++; } //若是按钮数目大于等于3的时候作省略号效果
        if(count($html)>=3){ reset($html); $key_first=key($html); end($html); $key_end=key($html); if($key_first!=1){ array_shift($html); array_unshift($html,"<a href='{$url}1'>1...</a>"); } if($key_end!=$page_num_all){ array_pop($html); array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>"); } } } //当前页不是第一页,触发上一页按钮
    if($_GET[$page]!=1){ $prev=$_GET[$page]-1; array_unshift($html,"<a href='{$url}{$prev}'><< 上一页</a>"); } //当前页不是最后一页,触发下一页按钮
    if($_GET[$page]!=$page_num_all){ $next=$_GET[$page]+1; array_push($html,"<a href='{$url}{$next}'>下一页>>> </a>"); } $html=implode(' ',$html); $data=array( 'limit'=>$limit,
        'html'=>$html ); return $data; } $page=page(100,10,5); echo $page['html']; ?>
相关文章
相关标签/搜索