PHP 分页小算法

昨天在里,和看到几位牛牛讨论关于PHP分页的算法,受益颇深,特将代码收藏,待以后使用。。

/* 大概的要求就是
*提供总页数,提供当前浏览页数,提供显示页数
*浏览页数尽量在中间
*比如总页数是100页,正在浏览第34页,要求显示7页
*哪么返回结果应该是31323334353637
*/

// ///萝莉控的/
function z( $m , $x , $len ) // M是总共多少页,X是位于中间的页,LEN是每次显示多少翻页
{ // 10,5,5
$start = $x - ( $len - 1 ) / 2 ;
if ( $start < 1 )
{
$start = 1 ;
$end = $len ;
if ( $end > $m ) $end = $m ;
}
else
{
$end = $start + $len - 1 ;
if ( $end > $m )
{
$offset = $end - $m ;
$end = $m ;
$start -= $offset ;
if ( $start < 1 ) $start = 1 ;
}
}
for ( $c = $start ; $c <= $end ; $c ++ ) $str [] = (int) $c ;
return $str ;
}
var_dump (z( 100 , 45 , 10 ));

// 废墟的方法///
function fucklolicon( $x , $m , $len )
{
$ss = intval ( $len / 2 );
$start = $x - $ss ;
$end = $x + $ss ;
if ( $start < 1 )
{
$off = $start - 1 ;
$start = 1 ;
$end -= $off ;
}
if ( $end > $m )
$end = $m ;
if ( $end > $m - $ss )
{
if ( $end - $m < 1 )
$start = 1 ;
else
$start = $end - $m ;
}
for ( $i = $start ; $i < $end + 1 ; $i ++ )
{
$p [] = $i ;
}
return $p ;
}

再来个全的。。废墟兄给的分页类。。。

/* 分页 */
function PageQuery( $table , $condition , $page = 1 , $url = "" , $PageList = 10 , $PageNum = 7 , $space = " &nbsp; " )
{
/* 查询总的记录数 */
if ( $condition == "" ) $condition = 1 ;
$aNum = $this -> GetRows( $table , $condition );
if ( $aNum == 0 ){
return $p ;
}
/* 总页数计算 */
if ( $aNum % $PageList == 0 ){
$aPage = $aNum / $PageList ;
}
else {
$aPage = intval ( $aNum / $PageList ) + 1 ;
}
/* 分页内容 */
if ( $page > intval ( $PageNum / 2 ) + 1 ){
$p [] = " <ahref="$_SERVER[PHP_SELF]?page=1&$url">|<<</a> " ;
}
if ( $page != 1 ){
$page_prev = $page - 1 ;
$p [] = " <ahref="$_SERVER[PHP_SELF]?page=$page_prev&$url"><<</a> " ;
}
$page_start = $page - intval ( $PageNum / 2 );
$page_end = $page + intval ( $PageNum / 2 );
if ( $page_start < 1 ){
$off = $page_start - 1 ;
$page_start = 1 ;
$page_end -= $off ;
}
if ( $page_end > $aPage ){
$page_end = $aPage ;
}
if ( $page_end > $aPage - intval ( $PageNum / 2 )){
if ( $page_end - $PageNum < 1 ){
$page_start = 1 ;
}
else { $page_start = $page_end - $PageNum ;}
}
for ( $i = $page_start ; $i < $page_end + 1 ; $i ++ ){
if ( $page == $i ){
$p [] = " <fontcolor="#6600FF">$i</font> " ;
}
else {
$p [] = " <ahref="$_SERVER[PHP_SELF]?page=$i&$url">$i</a> " ;
}
}
if ( $page < $aPage ){
$page_next = $page + 1 ;
$p [] = " <ahref="$_SERVER[PHP_SELF]?page=$page_next&$url">>></a> " ;
}
if ( $page < $aPage - intval ( $PageNum / 2 )){
$p [] = " <ahref="$_SERVER[PHP_SELF]?page=$aPage&$url">>>|</a> " ;
}
$p [] = " 总共$aPage页$aNum条 " ;
return implode ( $space , $p );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值