美文网首页
最全最详细的php分页函数

最全最详细的php分页函数

作者: 我是一只小毛毛 | 来源:发表于2018-02-01 12:03 被阅读0次

/*

  • 调用:$page=page(100,10,9,'page');
  • 返回值:array('limit','html')
    参数说明:$count:总记录数,$page_size:每页显示的记录数,$num_btn:要展示的页码按钮数目,$page:分页的get参数,

    效果如下图所示: page.jpg
    */
function page($count,$page_size,$num_btn=10,$page='page'){

   if($count==0){//如果没有记录返回空的字符串
       $data=array(
           'limit'=>'',
           'html'=>''
       );
       return $data
};

//如果获得的page参数不合法,默认参数等于1
if(!isset($_GET[$page])||!is_numeric($_GET[$page])||$_GET[$page]<1){
       $_GET[$page]=1
};

$page_num_all=ceil($count/$page_size);//页码数向上取整

//如果页码参数大于页码总页数,page就默认等于最大页码数
if($_GET[$page]>$page_num_all){
    $_GET[$page]=$page_num_all
};

//根据当前page参数计算起始数据值,比如有100条数据,每页显示10条,那么第三页起始值得index就是$start
$start=($_GET[$page]-1)*$page_size;

$limit="limit {$start},{$page_size}";//从index为$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'])){//判断当前url地址是否存在参数部分
     parse_str($arr_current['query'],$arr_query);//如果存在参数部分,则将参数拆分
     unset($arr_query[$page]);//删掉参数部分的page
    if(empty($arr_query)){//删掉page参数后判断url是否没有其他参数
           $url="{$current_path}?{$page}=";//如果除了删掉page后没有其他参数,直接在当前路径后加上page=
       }else{
           $other=http_build_query($arr_query);//除了page还有其他参数的话就将其他参数转换成字符串接在当前路径后面
           $url="{$current_path}?{$other}&{$page}=";//在当前路径后接上拆分后处理好的参数
       }
}else{
       $url="{$current_path}?$page=";//如果不存在参数部分,则直接在url后添加参数
};

$html=array();//定义$html为数组

if($num_btn>=$page_num_all){//如果传入的按钮数目参数大于总的页码数,直接默认显示所有页码按钮
       for($i=1;$i<=$page_num_all;$i++){//$i既是限制循环次数的变量,也是页码号
           if($_GET[$page]==$i){
               $html[$i]="{$i} ";
           }else{
               $html[$i]="{$i} ";
           }
      }
}else{
       $num_left=floor(($num_btn-1)/2);//获得左边的按钮数目,向下取整
       $start=$_GET[$page]-$num_left;//获得左边起始页码数字
       $end=$start+($num_btn-1);//获得最右边页码数字
       if($start<1){//如果最左边按钮数字小于1,默认等于1
           $start=1;
}
       if($end>$page_num_all){//如果最右边页码数大于最大页码数,默认等于1
           $start=$page_num_all-($num_btn-1);
}
       for($i=0;$i<$num_btn;$i++){//$i既是限制循环次数的变量,也是页码号
           if($_GET[$page]==$start){
               $html[$start]="{$start} ";
           }else{
               $html[$start]="{$start}";
}
           $start++;
}

//当按钮数目大于等于三的时候做省略号效果

  if(count($html)>=3){
        reset($html);
        $key_first=key($html);
        $key_end=key($html);
        if($key_first!=1){
          array_shift($html);
          array_unshift($html,"1...");
     }

  if($key_end!=$page_num_all){
    array_pop($html);
    array_push($html,"...{$page_num_all}");
     }
  }
}

   if($_GET[$page]!=1){
       $prev=$_GET[$page]-1;
       array_unshift($html,"<上一页 ");
}
   if($_GET[$page]!=$page_num_all) {
       $next = $_GET[$page] + 1;
       array_push($html,"下一页>");
}
   $html=implode(' ',$html);
   $data=array(
       'limit'=>$limit,
       'html'=>$html
   );
   return $data;
}
             ```

相关文章

网友评论

      本文标题:最全最详细的php分页函数

      本文链接:https://www.haomeiwen.com/subject/asorzxtx.html