$nPageSize = 19;
$nMaxRow = count($arrReportFilterRulePersons);
$nCurrentStartRowIndex = ($nPage - 1) * $nPageSize;
$nRowsFromCurrentPageToLastPage = $nMaxRow - $nCurrentStartRowIndex;
$nMaxPage = ceil($nMaxRow / $nPageSize);
if ($nPage == 1)
{
$nPrevPage = 1;
}
else
{
$nPrevPage = $nPage - 1;
}
if ($nPage == $nMaxPage)
{
$nNextPage = $nNextPage;
}
else
{
$nNextPage = $nPage + 1;
}
$bMoreThanOnePage = false;
$bIsLastPage = false;
if ($nMaxRow > $nPageSize)
{
$bMoreThanOnePage = true;
}
if ($nRowsFromCurrentPageToLastPage <= $nPageSize)
{
$bIsLastPage = true;
}
// Get current page's persons list
if ($bMoreThanOnePage && $bIsLastPage)
{
$arrReportFilterRulePersons = array_slice($arrReportFilterRulePersons,$nCurrentStartRowIndex,$nRowsFromCurrentPageToLastPage);
}
else if ($bMoreThanOnePage && !$bIsLastPage)
{
$arrReportFilterRulePersons = array_slice($arrReportFilterRulePersons,$nCurrentStartRowIndex,$nPageSize);
}

解决方案 »

  1.   

    天啊,php分页如果用mysql的话最简单了 在查询的是 用limit关键字啊
      

  2.   

    /******************************************
    函数:Pagination($total,$per)
    功能:分页
    参数:$total 总记录数 ,  $per 每页显示记录数
    备注:http://yubeinet.com surfchen
    ******************************************/  
    function Pagination($total,$per)
    {
    $n=$total/$per;
    $page_num=ceil($n);
    if ($page_num==1)
    {
    return false;
    }
    $url=basename($_SERVER['PHP_SELF']);
    $query_array=explode("&",$_SERVER['argv'][0]);
    foreach ($query_array as $key => $value)
    {
    if (strstr($value,"page="))
    {
    unset($query_array[$key]);
    }
    }
    $query_string=implode("&amp;",$query_array);
    for ($page=1;$page<=$page_num;$page++)
    {
    echo "<a href=\"{$url}?{$query_string}&amp;page={$page}\">$page</a>  ";
    }
    echo "<br />";
    }
      

  3.   

    好好保护我这只菜鸟........没用过mysql....才开始学php
      

  4.   

    <?php
    include_once"DB.php";
     
    class listPage { 
    var $_table; //表名 
    var $_maxLine; //每页显示行数 
    var $_db;
    var $_offset; //记录偏移量 

    var $total = 0; //记录总数 
    var $number; //本页读取的记录数 
    var $result; //读出的结果  var $totalPgs; //总页数 
    var $currentPgs; //当前页数 
    var $condition; //显示条件 如:where id='$id' order by id desc 
    var $pageQuery; //分页显示要传递的参数  var $pageLink1;//分页显示链接
    var $pageLink2;//分页显示链接 //******构造函数************* 
    //参数:表名、最大行数、偏移量、db对象
    //分页参考字段请用一个自动编号字段 
    function ListPage($tableName,$PgNum,$off=0,$db){ 
    $this->_table=$tableName; 
    $this->_maxLine=$PgNum; 
    $this->_offset=$off;  
    $this->_db=$db;
    $this->condition=" ";
    $this->_db->setFetchMode(DB_FETCHMODE_ASSOC);

    //********设置显示条件********* 
    //如:where id='$id' order by id desc 
    //要求是字串string,符合SQL语法(本字串将加在SQL语句后)
    function setCondition($s){ 
     $this->condition = $s; 
     return true;
    }  //******设置传递参数************ 
    // key参数名 value参数值 
    // 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。
    function setPageQuery($key,$value){ 
    $tmp['k']=$key; $tmp['value']=$value; 
    $this->pageQuery[]= $tmp;
    //printr($this->pageQuery);
    }  //********读取记录*************** 
    // 主要工作函数,根据所给的条件从表中读取相应的记录 
    // 返回值是一个二维数组,Result[记录号][字段名] 
    function readList() { 
    $SQL = "select * from ".$this->_table." ".$this->condition;
    $result = $this->_db->query($SQL);

    $this->total = $result->numRows();//计算总记录数

    if($this->total>0) { //根据条件 Condition //起始
    $SQL="SELECT * FROM ".$this->_table." ".$this->condition;
    //if(($this->_offset * $this->_maxLine) > $this->total ) $this->_offset = 0;
    $result = $this->_db->limitQuery($SQL,$this->_offset,$this->_maxLine);

    $k=0;
    $rows = array();
    while($rows = $result->fetchRow()){
    $this->result[] = $rows;
    $k++;
    }
    $this->number=$k;

    return $this->result; 
    }  //**********显示页数************* 
    //显示当前页及总页数 
    function setPgs() { 
    $this->totalPgs = ceil($this->total / $this->_maxLine); 
    $this->currentPgs = ceil($this->_offset / $this->_maxLine)+1; 
    }  //**********显示翻页按钮************* 
    //此函数要在ThePage()函数之后调用!!! 
    //显示首页、下页、上页、未页,并加上要传递的参数 
    function setPage() {
    $this->setPgs();
    $first=1; 
    $next=$this->currentPgs+1; 
    $prev=$this->currentPgs-1; 
    $last=$this->totalPgs; 

    $k=count($this->pageQuery); 
    $strQuery=""; //生成一个要传递参数字串 
    for($i=0;$i < $k;$i++){ 
    $strQuery.="&".$this->pageQuery[$i]['k']."=".$this->pageQuery[$i]['value']; 
    }  $this->pageLink1 = "";
    if($this->currentPgs>1 && $this->currentPgs < $this->totalPgs){
    $this->pageLink1 .="|&nbsp;<a href=".$_SERVER['PHP_SELF']."?currentpage=".$first.$strQuery.">首页</A>&nbsp;";
    $this->pageLink1 .= "<a href=".$_SERVER['PHP_SELF']."?currentpage=".$prev.$strQuery.">上一页 </a>&nbsp;";
    $this->pageLink1 .= "|&nbsp;<A href=".$_SERVER['PHP_SELF']."?currentpage=".$next.$strQuery.">下一页</A>&nbsp;";
    $this->pageLink1 .= "<A href=".$_SERVER['PHP_SELF']."?currentpage=".$last.$strQuery.">末页</A>&nbsp;|";
    }
    else if($this->currentPgs==1 && $this->currentPgs < $this->totalPgs) {
    $this->pageLink1 .="|&nbsp;首页&nbsp上一页&nbsp;|&nbsp;";
    $this->pageLink1 .="<A href=".$_SERVER['PHP_SELF']."?currentpage=".$next.$strQuery.">下一页</A>&nbsp;";
    $this->pageLink1 .="<A href=".$_SERVER['PHP_SELF']."?currentpage=".$last.$strQuery.">末页</A>&nbsp;|";
    }
    else if($this->currentPgs==$this->totalPgs && $this->totalPgs>1) {
    $this->pageLink1 .="|&nbsp;<A href=".$_SERVER['PHP_SELF']."?currentpage=".$first.$strQuery.">首页</A>&nbsp;";
    $this->pageLink1 .="<a href=".$_SERVER['PHP_SELF']."?currentpage=".$prev.$strQuery.">上一页 </a>&nbsp;";
    $this->pageLink1 .="|&nbsp;下一页&nbsp;末页&nbsp;|";
    } for($i=1;$i<=$this->totalPgs;$i++)
    {
    $this->pageLink2 .= "<a href=".$_SERVER['PHP_SELF']."?currentpage=".$i.$strQuery.">".$i."</a>&nbsp;";
    } }
    }
    //******end class --------------
    ?>
      

  5.   

    我以前写的一段小代码
    #初始化翻页变量
    function initpage(){
    #初始化$this->page为数组,存储方式为
    #page[0]=当前是第几页
    #page[1]=每页显示几条数据
    #page[2]=总共有多少条数据
    #page[3]=从哪条数据开始读取
    #page[4]=总共有多少页
    #数据分页方法:
    #select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
    #初始化
    $pg=$_GET['page'];
    #取得页数
    $this->page[0]=(isset($pg)?intval($pg):1);
    #每页显示几条数据,默认显示20条每页
    $this->page[1]=(DEFINED("DEF_PAGE_SIZE")?DEF_PAGE_SIZE:20);
    #总共有多少条数据
    $this->execute($this->sql);
    $this->page[2]=$this->rs->RecordCount();
    #设置开始读取数据ID
    $this->page[3]=(($this->page[0]-1)*$this->page[1]);
    #总共页数
    if($this->page[2]){
       #总数据量小于$PageSize,只有一页
       if( $this->page[2]<$this->page[1]){$this->page[4]= 1;}  
       #取总数据量除以每页数的余数
       if( $this->page[2]%$this->page[1]){ 
       #如果有余数,则页数等于总数据量除以每页数的结果取整再加一                        
       $this->page[4]= (int)($this->page[2]/$this->page[1]) + 1;   
       #如果没有余数,则页数等于总数据量除以每页数的结果
       }else{
       $this->page[4] = $this->page[2] / $this->page[1];                      
       }
    }
    #没有数据的时候置0
    else{
       $this->page[4] = 0;
    }
    unset($pg);unset($sql);
    }
    #翻页初始化结束#显示翻页条
    function showpage(){
    $url=$_SERVER['PHP_SELF'];
    $str.="<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"txt\"> \n\t";
    $str.="<tr> \n\t";
    $str.="<td>&nbsp;数据:".$this->page[2]."条 每页:";
    $str.=$this->page[1]."条 第:".$this->page[0]."/".$this->page[4]."页</td> \n\t";
    $str.="<td align=\"right\" class=\"txt\">\n\t";
    $str.="<a href=".$url."?act=list&page=1><span class=\"txt\">首页</span></a>\n\t";
    if(1<$this->page[0]){
    $str.="<a href=".$url."?act=list&page=".($this->page[0]-1)."><span class=\"txt\">上一页</span></a>\n\t";
    }else{$str.="上一页 ";}
    if($this->page[0]<$this->page[4]){
    $str.="<a href=".$url."?act=list&page=".($this->page[0]+1)."><span class=\"txt\">下一页</span></a>\n\t";
    }else{$str.="下一页 \n\t";}
    $str.="<a href=".$ulr."?act=list&page=".$this->page[4]."><span class=\"txt\">尾页</span></a> 转到第 ";
    $str.="<select name=\"select\" class=\"bg2\" \n\t";
    $str.="onchange=javascript:location=\"".$url."?act=list&page=\"+";
    $str.="this.options[this.selectedIndex].value> \n\t";
    for($i=1;$i<=$this->page[4];$i++){
    if($this->page[0]==$i){
    $str.="<option value=\"$i\" selected>".$i."</option> \n\t";
    }else{$str.="<option value=\"$i\">".$i."</option> \n\t";}
    }
    $str.="</select> \n\t";
    $str.="页</td> \n\t";
    $str.="</tr> \n\t";
    $str.="</table>\n\t";
    unset($url);unset($i);
    return $str;

    }
    #显示翻页条结束#这是在一个主类当中的两个小函数
    #使用方法:$xfoa = new application();
    $xfoa->set_sql("select id,title,content form news order by id desc");
    $xfoa->initpate();
    #后面是数据显示操作
    $records=$xfoa->execute();#此函数执行先前保存sql语句($xfoa->set_sql()), 并返回句柄
    if(!$records){
    #....
    ;
    }else{
    #....
    ;
    #显示分页条
    $xfoa->showpage();
    }
    #清理
    $xfoa->nothing();
    unset($xfoa);