• 数据分页函数的编写


    编写思路:
    1.分页函数可以帮助我们完成select语句的limit部分

    每页显示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,3


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

    <?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'];
    ?>
  • 相关阅读:
    输入'过程'求方差算法的简单优化(免去数组的使用)
    PAT 甲级 1002 A+B for Polynomials
    常见算法时间函数的增长趋势分析
    洛谷 P4888 三去矩阵
    PAT 甲级 1001 A+B Format
    网站云服务器迁移时遇到的坑
    Angular JS中自定义标签 属性绑定的解释
    how to do a mass update in Laravel5 ( 在Laravel 5里面怎么做大量数据更新 )
    javascript 到将来某个时间(2020-5-20)的倒计时
    javascript 数字日期格式转换为中文
  • 原文地址:https://www.cnblogs.com/Emily-m/p/10741408.html
Copyright © 2020-2023  润新知