PHP分页类-面试题目解答

 今天去XX公司面试了,感觉很不理想。因为这一段时间都在加深Zend Framework,都没练习常用函数和方法了。
笔试回答的不太好,特别是JS部分,也是许久都没复习的原因。
上机题目是要写一个仿google分页的类,当要取类似9/2的最大整数,却怎么也想不起函数ceil的名字,晕了半天。
最后测试程序没错误,但是就是不能正常显示,后来(回家后)一查才知道是语句:for($i=0;$i++;$i<9)写错了,于是下决心重新写一遍,于是就有了下面的代码了:

<?php
/*
显示样式如下:
[1] 2 3 4 5 6 7 8 9 10 ...100 下页 尾页
首页 上页 1..12 13 14 15 [16] 17 18 19 20 ...100 下页 尾页
首页 上页 1..92 93 94 95 96 97 98 [99] 100

使用方法:
$currentPage = $_GET['page']?$_GET['page']:1;
$pagediv = new pagediv(500, 10, 11, $currentPage, 'test.php?page=');
$pagediv->show();

*/
class pagediv
{
 public $part1;
 public $part2;
 public $part3;
 public $part4;
 public $part5;

/*
对下面的分页显示进行分割:
首页 上页 1..12 13 14 15 [16] 17 18 19 20 ...100 下页 尾页
$part1 : 首页 上页
$part2 : 1..
$part3 : 12 13 14 15 [16] 17 18 19 20
$part4 : ...100
$part5 : 下页 尾页
*/
 
 public $allPage;     //总页数
 public $allRocords;  //总记录数
 public $perPage;     //每页记录数
 public $showPagesNo; //显示分页栏的总页码数 显示样式里共有11个
 public $currentPage; //当前页
 public $urlModel;    //Url链接样式
 
 public $startHidden; //出现 1...   时的页数 开始隐藏中间页
 public $endHidden;   //出现 ...100 时的页数 结束隐藏中间页
 
 public function __construct($allRocords, $perPage, $showPagesNo, $currentPage, $urlModel){
  $this->allRocords = $allRocords;
  $this->perPage = $perPage;
  $this->showPagesNo = $showPagesNo;
  $this->currentPage = $currentPage;
  $this->urlModel = $urlModel;
  $this->allPage = $this->getAllPage();
  
  $this->startHidden = $this->getInt(($this->showPagesNo)/2); //6
  $this->endHidden = $this->allPage - $this->startHidden; //94
 }
 
 public function getUrl($_index = ''){
  $_current = $_index;
  if($_index == 'pre') $_current = $this->currentPage -1;
  if($_index == 'next') $_current = $this->currentPage+1;
  if($_index == '') $_current = $this->allPage; 
  return $this->urlModel.$_current;
 }
 
 public function getAllPage(){
  return $this->getInt($this->allRocords/$this->perPage);
 }
 
 public function getInt($_float){
  $_int = $_float;
  if( $_index = strpos($_float,'.') == true ){
   $_int = substr($_float,0,$_index);
   $_int++;
  }
  //没有想起ceil时的候补方案
  return $_int;
 }
 
 public function getPart1(){
  $content = '<a href="'.$this->getUrl(1).'">首页</a>&nbsp;<a href="'.$this->getUrl('pre').'">上页</a>&nbsp;';
  if($this->currentPage <= $this->startHidden){
   $content = '';
  }
  return $content;
 }
 
 public function getPart2(){
  $content = '<a href="'.$this->getUrl(1).'">1</a>&nbsp;';
  $add = '';
  if($this->currentPage > $this->startHidden){
   $add = '...';
  }
  if($this->currentPage == 1){
   $content = '[1]&nbsp;';
   $add = '';
  }
  $part2 = $content.$add;
  return $part2;
 }
 
 public function getPart3(){
  $content = '';
  if($this->currentPage <= $this->startHidden){
   //[1] 2 3 4 5 6 7 8 9 10 ...100 下页 尾页
   $long = $this->showPagesNo - 2;
   for($i=0;$i<$long;$i++){
    $j = $i+2;
    if($j == $this->currentPage){
     $content .= '['.$this->currentPage.']&nbsp;';
    }else{
     $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a>&nbsp;'; 
    }
    
   }
   
  }elseif( $this->currentPage >= $this->endHidden ){
   //首页 上页 1..92 93 94 95 96 97 98 [99] 100
   $long = $this->showPagesNo - 2;
   $_start = $this->allPage - $long;
   for($i=0;$i<$long;$i++){
    $j = $_start + $i;
    if($j == $this->currentPage){
     $content .= '['.$this->currentPage.']&nbsp;';
    }else{
     $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a>&nbsp;'; 
    }
   }
  }else{
   //首页 上页 1..12 13 14 15 [16] 17 18 19 20 ...100 下页 尾页
   $long = $this->showPagesNo - 2;
   $offset = $this->getInt($long/2) - 1;
   $_start = $this->currentPage - $offset;
   for($i=0;$i<$long;$i++){
    $j = $_start + $i;
    if($j == $this->currentPage){
     $content .= '['.$this->currentPage.']&nbsp;';
    }else{
     $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a>&nbsp;'; 
    }
   }
  }
  $part3 = $content;
  return $part3;
 }
 
 public function getPart4(){
  $content = '<a href="'.$this->getUrl().'">'.$this->allPage.'</a>&nbsp;';
  $add = '';
  if($this->currentPage < $this->endHidden){
   $add = '...';
  }
  if($this->currentPage == $this->allPage){
   $content = '['.$this->allPage.']';
   $add = '';
  }
  $part4 = $add.$content;
  return $part4;
  
 }
 
 public function getPart5(){
  $content = '<a href="'.$this->getUrl('next').'">下页</a>&nbsp;<a href="'.$this->getUrl().'">尾页</a>';
  if($this->currentPage >= $this->endHidden){
   $content = '';
  }
  return $content;
 }
 
 public function show(){
  //判断非法
  if(!is_numeric($this->currentPage) || $this->currentPage < 0 || $this->currentPage > $this->allPage){
   print 'error:pageNo is flase';
   return;
  }
  //总页数没有达到显示分页栏的总页码数,则全部显示
  if($this->allPage < $this->showPagesNo){
   $long = $this->allPage;
   for($i=0;$i<$long;$i++){
    $j = $i+1;
    if($j == $this->currentPage){
     $content .= '['.$this->currentPage.']&nbsp;';
    }else{
     $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a>&nbsp;'; 
    }
    
   }
   print $content;
   return;
  }
  $this->part1 = $this->getPart1();
  $this->part2 = $this->getPart2();
  $this->part3 = $this->getPart3();
  $this->part4 = $this->getPart4();
  $this->part5 = $this->getPart5();
  
  print $this->part1.$this->part2.$this->part3.$this->part4.$this->part5;
 }
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值