PHP 分页类(模仿google)-面试题目解答
2015-01-24信息快讯网
上机题目是要写一个仿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> <a href="'.$this->getUrl('pre').'">上页</a> '; if($this->currentPage <= $this->startHidden){ $content = ''; } return $content; } public function getPart2(){ $content = '<a href="'.$this->getUrl(1).'">1</a> '; $add = ''; if($this->currentPage > $this->startHidden){ $add = '...'; } if($this->currentPage == 1){ $content = '[1] '; $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.'] '; }else{ $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> '; } } }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.'] '; }else{ $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> '; } } }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.'] '; }else{ $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> '; } } } $part3 = $content; return $part3; } public function getPart4(){ $content = '<a href="'.$this->getUrl().'">'.$this->allPage.'</a> '; $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> <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.'] '; }else{ $content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> '; } } 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; } } ?>
PHP中Date()时间日期函数的使用方法小结
PHP5中虚函数的实现方法分享
Windows下利用Gvim写PHP产生中文乱码问题解决方法
php中将地址生成迅雷快车旋风链接的代码[测试通过]
PHP curl模拟浏览器采集阿里巴巴的实现代码
写php分页时出现的Fatal error的解决方法
PHP分页函数代码(简单实用型)
php下封装较好的数字分页方法
PHP 分页类代码(简单好用型)第1/2页
ajax实现无刷新分页(php)
火车头discuz6.1 完美采集的php接口文件
frename PHP 灵活文件命名函数 frename
PHPLog php 程序调试追踪工具
php 从数据库提取二进制图片的处理代码
PHP 数组遍历顺序理解
PHP 裁剪图片成固定大小代码方法
php 分页原理详解
php 分页函数multi() discuz
php 分页类 扩展代码
php mssql 分页SQL语句优化 持续影响
AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定