IVY DOM


 

人生就像一副复杂拼图
每个人总有属於自己的记忆碎片
优质美国空间-老薛主机|IVY DOM|Flowline|

联系我

RSS




八月 03, 2014

PHP分页

第一次写关于PHP分页的内容,得出一点心得.

首先,被分页的页面应该包含以下内容:

1.当前页码(Current_Page)

2.上一页(Pre_Page)

3.下一页(Next_Page)

4.页码总数量(PageSize)

得到PageSize

PageSize可以由项目总数除以每页显示个数并取整得到.取整用函数ceil()完成

ceil():

返回不小于 x 的下一个整数,x 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。

我们假设每页显示10个,项目储存在数组a里,那么得到PageSize的代码就是:

$itemcount=count($a);
$pagesize=ceil($itemcount/10);

得到当前页码

这个没啥好说的,通过$_GET取参即可

$Current_Page=test_input($_GET['dypage']);

得到下一页

这里要注意用户输入超出PageSize的问题,所以我们要做一个判断,如果超出Nexe_Page需要等于PageSize.其它的就是由Current_Page+1获得了

if($Personal_Current_Page==$pagesize){
  $Personal_Next_Page=$pagesize;
}else{
  $Personal_Next_Page=$Personal_Current_Page+1;}

得到上一页

这里要注意如果当前页面是1,Current_Page减去之后得到0的问题,所以也要加一部验证.

if($Current_Page==1){
$Next_Page=1;
}else{$Next_Page=Personal_Current_Page-1;}

数组指针问题

下面就是换页之后数组的输出问题了,即数组的指针该指向第几个索引.

我们假设每页显示10个项目,这样1234页数组指针的位置应该由下图所示

Page 1 2 3 4
指针位置 0 10 20 30

其实就这就是个高中数列题了,已知上图,求通项公式

这个就不用多讲了吧?一个an=a1+(n-1)d就可解决

我求出来的公式是

Point_pos=Current_Page*5+Current_Page*5-10

代入代码即

$startkey=($Personal_Current_Page*5)+((5*($Personal_Current_Page))-10);

这时问题又来了,万一第四页的数组指针不是以30结束的该怎么办?

EndKey

首先我们要假设每页都是以整书(10,20,30……)结束的,,即我们的EndKey每次要递增10

这时要比较EndKey与ItemCoount谁大谁小,如果EndKey>ItemCount则设tmp=$endkey-$itemcount,得到最后一个与项目整体的差数,再用EndKey减去这个差数就能得到最终的数组指针停止位置.

$endkey=$startkey+10;

if($endkey>$itemcount){
  $tmp=$endkey-$itemcount;
  $endkey=$endkey-$tmp;
}
<div class="list-group">
<?php
$tr=ReadDyn($_SESSION['user-account']);
$tr_re=array_reverse($tr);
$itemcount=count($tr_re);

$pagesize=ceil($itemcount/10);

$Personal_Current_Page=test_input($_GET['dypage']);

if($Personal_Current_Page>$pagesize or !(is_numeric($Personal_Current_Page))){
  header("location:index.php?dypage=1");}

if(strlen($Personal_Current_Page)==0){
  $Personal_Current_Page=1;}

if($Personal_Current_Page==$pagesize){
  $Personal_Next_Page=$pagesize;
}else{
  $Personal_Next_Page=$Personal_Current_Page+1;}

$startkey=($Personal_Current_Page*5)+((5*($Personal_Current_Page))-10);
$endkey=$startkey+10;

if($endkey>$itemcount){
  $tmp=$endkey-$itemcount;
  $endkey=$endkey-$tmp;
}

for($i=$startkey;$i<$endkey;$i++){ 
  $stime=substr($tr_re[$i], 0,19);
  $ts=GetTimeStamp($stime);

  $vasub=substr($tr_re[$i], 19);
  echo '  <a class="list-group-item">
    <h4 class="list-group-item-heading">'.$vasub.'</h4>
    <p class="list-group-item-text">'.$ts.'前</p>
  </a>';
}

?>
<ul class="pagination">
  <li><a href="index.php?dypage=<?php if($Personal_Current_Page==1){echo '1';}else{echo $Personal_Current_Page-1;} ?>">«</a></li>
  <?php
  for($i=1;$i<=$pagesize;$i++){
  ?>
  <li><a href="index.php?dypage=<?php echo $i; ?>"><?php echo $i; ?></a></li>
  <?php
  }
  ?>
  <li><a href="index.php?dypage=<?php echo $Personal_Next_Page; ?>">»</a></li>
</ul>
</div>

相关文章

返回
  1. 暂无评论。

  1. 暂无 Trackback

You must be logged in to post a comment.