最全最詳細的php分頁函數(shù)

/*

  • 調用:$page=page(100,10,9,'page');
  • 返回值:array('limit','html')
    參數(shù)說明:$count:總記錄數(shù),$page_size:每頁顯示的記錄數(shù),$num_btn:要展示的頁碼按鈕數(shù)目,$page:分頁的get參數(shù),

    效果如下圖所示:
    page.jpg

    */
function page($count,$page_size,$num_btn=10,$page='page'){

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

//如果獲得的page參數(shù)不合法,默認參數(shù)等于1
if(!isset($_GET[$page])||!is_numeric($_GET[$page])||$_GET[$page]<1){
       $_GET[$page]=1
};

$page_num_all=ceil($count/$page_size);//頁碼數(shù)向上取整

//如果頁碼參數(shù)大于頁碼總頁數(shù),page就默認等于最大頁碼數(shù)
if($_GET[$page]>$page_num_all){
    $_GET[$page]=$page_num_all
};

//根據(jù)當前page參數(shù)計算起始數(shù)據(jù)值,比如有100條數(shù)據(jù),每頁顯示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拆分到數(shù)組里面

$current_path=$arr_current['path'];//將文件路徑部分保存起來

$url=''";///定義按鈕點擊的路徑

if(isset($arr_current['query'])){//判斷當前url地址是否存在參數(shù)部分
     parse_str($arr_current['query'],$arr_query);//如果存在參數(shù)部分,則將參數(shù)拆分
     unset($arr_query[$page]);//刪掉參數(shù)部分的page
    if(empty($arr_query)){//刪掉page參數(shù)后判斷url是否沒有其他參數(shù)
           $url="{$current_path}?{$page}=";//如果除了刪掉page后沒有其他參數(shù),直接在當前路徑后加上page=
       }else{
           $other=http_build_query($arr_query);//除了page還有其他參數(shù)的話就將其他參數(shù)轉換成字符串接在當前路徑后面
           $url="{$current_path}?{$other}&{$page}=";//在當前路徑后接上拆分后處理好的參數(shù)
       }
}else{
       $url="{$current_path}?$page=";//如果不存在參數(shù)部分,則直接在url后添加參數(shù)
};

$html=array();//定義$html為數(shù)組

if($num_btn>=$page_num_all){//如果傳入的按鈕數(shù)目參數(shù)大于總的頁碼數(shù),直接默認顯示所有頁碼按鈕
       for($i=1;$i<=$page_num_all;$i++){//$i既是限制循環(huán)次數(shù)的變量,也是頁碼號
           if($_GET[$page]==$i){
               $html[$i]="{$i} ";
           }else{
               $html[$i]="{$i} ";
           }
      }
}else{
       $num_left=floor(($num_btn-1)/2);//獲得左邊的按鈕數(shù)目,向下取整
       $start=$_GET[$page]-$num_left;//獲得左邊起始頁碼數(shù)字
       $end=$start+($num_btn-1);//獲得最右邊頁碼數(shù)字
       if($start<1){//如果最左邊按鈕數(shù)字小于1,默認等于1
           $start=1;
}
       if($end>$page_num_all){//如果最右邊頁碼數(shù)大于最大頁碼數(shù),默認等于1
           $start=$page_num_all-($num_btn-1);
}
       for($i=0;$i<$num_btn;$i++){//$i既是限制循環(huán)次數(shù)的變量,也是頁碼號
           if($_GET[$page]==$start){
               $html[$start]="{$start} ";
           }else{
               $html[$start]="{$start}";
}
           $start++;
}

//當按鈕數(shù)目大于等于三的時候做省略號效果

  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;
}
             ```
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.背景介紹 洗牌算法是我們常見的隨機問題,在玩游戲、隨機排序時經(jīng)常會碰到,本質是讓一個數(shù)組內的元素隨機排列。 類...
    茍況勸學閱讀 1,400評論 0 0
  • 前段時間有好多朋友在問H-ui的分頁怎么整,那么我今天來告訴大家我的分頁方式,第一次發(fā)可能做的不是太好,大佬請不要...
    微風間間閱讀 4,481評論 1 0
  • 當你飛得遠了, 父母見你的第一眼, 是眼淚。 你以為, 繁華浮世看得多了, 你見父母的第一眼, 是愧疚。
    SomeonelikeyouX閱讀 144評論 1 0
  • 最近媽媽身體出了一些問題,需要有人在家陪護,鄰居的父親的身體也出了一些問題。我是獨生子女,我媽媽生病,義無反顧...
    青苗媽2016閱讀 649評論 5 0
  • 昨天公司安排的培訓任務緊急且重要,突然一下子要求了很多,也要求很高,其實我理解做培訓其實也就是作翻譯,要把...
    做自己的思想家閱讀 466評論 0 4

友情鏈接更多精彩內容