首页 > 编程知识 正文

php方法内分页操作一个数组,php分页功能怎么实现

时间:2023-12-28 11:56:40 阅读:327536 作者:OOJV

本文目录一览:

求PHP各种分页方法,各位大仙有的别藏了~~

PHP分页方法:

第一步创建一个类 subPages.php?php

class SubPages{

private $each_disNums;//每页显示的条目数

private $nums;//总条目数

private $current_page;//当前被选中的页

private $sub_pages;//每次显示的页数

private $pageNums;//总页数

private $page_array = array();//用来构造分页的数组

private $subPage_link;//每个分页的链接

private $subPage_type;//显示分页的类型

//__construct是SubPages的构造函数,用来在创建类的时候自动运行. //@$each_disNums 每页显示的条目数 // @nums 总条目数 // @current_num 当前被选中的页 //@sub_pages 每次显示的页数 // @subPage_link 每个分页的链接 //@subPage_type 显示分页的类型 //当@subPage_type=1的时候为普通分页模式 example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] //当@subPage_type=2的时候为经典分页样式 example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]

function __construct($each_disNums,$nums,$current_page,$sub_pages,$subPage_link,$subPage_type){

//intval通过使用特定的进制转换(默认是十进制),返回变量 var 的 integer 数值

$this-each_disNums=intval($each_disNums);

$this-nums=intval($nums);

if(!$current_page){

$this-current_page=1;

}else{

$this-current_page=intval($current_page);

}

$this-sub_pages=intval($sub_pages);

$this-pageNums=ceil($nums/$each_disNums);

$this-subPage_link=$subPage_link;

$this-show_SubPages($subPage_type);

//echo $this-pageNums."--".$this-sub_pages;

}

//__destruct析构函数,当类不在使用的时候调用,该函数用来释放资源

function __destruct(){

unset($each_disNums);

unset($nums);

unset($current_page);

unset($sub_pages);

unset($pageNums);

unset($page_array);

unset($subPage_link);

unset($subPage_type);

}

//show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页

function show_SubPages($subPage_type){

if($subPage_type == 1){

$this-subPageCss1();

}elseif ($subPage_type == 2){

$this-subPageCss2();

}

}

//用来给建立分页的数组初始化的函数。

function initArray(){

for($i=0;$i$this-sub_pages;$i++){

$this-page_array[$i]=$i;

}

return $this-page_array;

}

//construct_num_Page该函数使用来构造显示的条目

// 即使:[1][2][3][4][5][6][7][8][9][10]

function construct_num_Page(){

if($this-pageNums $this-sub_pages){

$current_array=array();

for($i=0;$i$this-pageNums;$i++){

$current_array[$i]=$i+1;

}

}else{

$current_array=$this-initArray();

if($this-current_page = 3){

for($i=0;$icount($current_array);$i++){

$current_array[$i]=$i+1;

}

}elseif ($this-current_page = $this-pageNums $this-current_page $this-pageNums - $this-sub_pages +1 ){

for($i=0;$icount($current_array);$i++){

$current_array[$i]=($this-pageNums)-($this-sub_pages)+1+$i;

}

}else{

for($i=0;$icount($current_array);$i++){

$current_array[$i]=$this-current_page-2+$i;

}

}

}

return $current_array;

}

//构造普通模式的分页

//共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]

function subPageCss1(){

$subPageCss1Str="";

$subPageCss1Str.="共".$this-nums."条记录,";

$subPageCss1Str.="每页显示".$this-each_disNums."条,";

$subPageCss1Str.="当前第".$this-current_page."/".$this-pageNums."页 ";

if($this-current_page 1){

$firstPageUrl=$this-subPage_link."1";

$prewPageUrl=$this-subPage_link.($this-current_page-1);

$subPageCss1Str.="[a href='$firstPageUrl'首页/a] ";

$subPageCss1Str.="[a href='$prewPageUrl'上一页/a] ";

}else {

$subPageCss1Str.="[首页] ";

$subPageCss1Str.="[上一页] ";

}

if($this-current_page $this-pageNums){

$lastPageUrl=$this-subPage_link.$this-pageNums;

$nextPageUrl=$this-subPage_link.($this-current_page+1);

$subPageCss1Str.=" [a href='$nextPageUrl'下一页/a] ";

$subPageCss1Str.="[a href='$lastPageUrl'尾页/a] ";

}else {

$subPageCss1Str.="[下一页] ";

$subPageCss1Str.="[尾页] ";

}

echo $subPageCss1Str;

}

//构造经典模式的分页

//当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]

function subPageCss2(){

$subPageCss2Str="";

$subPageCss2Str.="当前第".$this-current_page."/".$this-pageNums."页 ";

if($this-current_page 1){

$firstPageUrl=$this-subPage_link."1";

$prewPageUrl=$this-subPage_link.($this-current_page-1);

$subPageCss2Str.="[a href='$firstPageUrl'首页/a] ";

$subPageCss2Str.="[a href='$prewPageUrl'上一页/a] ";

}else {

$subPageCss2Str.="[首页] ";

$subPageCss2Str.="[上一页] ";

}

$a=$this-construct_num_Page();

for($i=0;$icount($a);$i++){

$s=$a[$i];

if($s == $this-current_page ){

$subPageCss2Str.="[span style='color:red;font-weight:bold;'".$s."/span]";

}else{

$url=$this-subPage_link.$s;

$subPageCss2Str.="[a href='$url'".$s."/a]";

}

}

if($this-current_page $this-pageNums){

$lastPageUrl=$this-subPage_link.$this-pageNums;

$nextPageUrl=$this-subPage_link.($this-current_page+1);

$subPageCss2Str.=" [a href='$nextPageUrl'下一页/a] ";

$subPageCss2Str.="[a href='$lastPageUrl'尾页/a] ";

}else {

$subPageCss2Str.="[下一页] ";

$subPageCss2Str.="[尾页] ";

}

echo $subPageCss2Str;

}

}

?要做分页的页面?php//每页显示的条数

$page_size=2;

//得到当前是第几页

$pageCurrent=$_GET["p"];

$offet =($pageCurrent-1)*$page_size;

//建立数据库连接

$conn = mysql_connect("地址","用户名","密码") or die("".mysql_error());

//设置字符集

mysql_query("set names gbk");

//设置数据库

mysql_select_db("数据库名",$conn) or die("".mysql_error());

if($conn) { include ("query.html");

//查询会员信息//注:这里的sql查询了两遍.第一遍是确定查询出来的总数据条数

$query_sql = "SELECT * FROM user_info_t order by id desc";//第二遍是根据需要即$page_size来确定每次查出的条数

$query_sql_sec= "SELECT * FROM user_info_t order by id desc limit $offet,$page_size";

//执行查询语句 返回一个结果集

$query_res = mysql_query($query_sql,$conn);

$query_res_sec = mysql_query($query_sql_sec,$conn);

//查询列数

//$query_cols = mysql_num_fields($query_res);

//查询行数

$query_num =mysql_num_rows($query_res);

//返回根据从结果集取得的行生成的数组,如果没有更多行

echo "table border='0' cellpadding='1' cellspacing='2' width='100%' bgcolor='#FFFFFF'";

while($query_row = mysql_fetch_array($query_res_sec)) {

echo "tr";

for ($i=0;$i$query_cols;$i++) {

echo "td bordercolor='#A2BEE1' bgcolor='#A2BEE1' width='8%'".$query_row[$i]."/tdn";

}

echo "td bordercolor='#A2BEE1' bgcolor='#A2BEE1' width='8%'";

//echo "input type='button' class='button' id='modify_record' name='modify_record' value='修改' /";

echo"button onClick="submit(location.href='../modify/modify.php?rec_id=$query_row[0]');"class="button";修改/button";

//echo "ahref='../delete/delete.php?rec_id=$query_row[0]'onClick="if(confirm('确实要删除此条记录吗?')) return true;else returnfalse;"img src="../image/delete.gif" align="absmiddle"/删除/a";

echo "buttononClick="if(confirm('确实要删除此条记录吗?')) return submit(location.href='../delete/delete.php?rec_id=$query_row[0]');else return false;"class="button";删除/button";

echo "/td";

echo "/tr";

}

//echo "/form";

echo "/table";

require_once("../common/subPages.php");//总条目数为数据库中查询出的数据条数

$nums=$query_num;

//每次显示的页数

$sub_pages=10; //if(!$pageCurrent) $pageCurrent=1;

//调用类SubPages 传的参数为:每页显示条数/当前第几页/每次显示的页数/分页模式

$subPage=new SubPages($page_size,$nums,$pageCurrent,$sub_pages,"query.php?p=",1);

}else{

die('数据库连接异常: '.mysql_error());

}

//断开数据库连接

if ($conn)

{

mysql_close($conn);

}

?

php 数组分页

这种不建议使用php分页,因为数据已经完整了,出于优化显示效果的目的而分页的话可以采用js方式。因为页面跳转需要让访问者等待较长的时间,所以不推荐这样做。

通常的分页都是将数据库内容进行分页,比如需要显示100条,但是每次只显示10条,这样一个是展示起来较快,另一个主要的原因是减少数据库端的压力。

你这种可以简单的分开放在多个div里面,通过上一页下一页控制div的显示和隐藏就行了。

thinkphp3.2 如果我已经有一个数组$(tmp),数组数据20条,需要分页10条每页,如何使用thinkphp分页

$Data = M('course_card'); // 实例化Data数据对象

import('ORG.Util.Page');// 导入分页类

$count = $Data-where($map)-count();// 查询满足要求的总记录数

$Page = new Page($count,1);// 实例化分页类 传入总记录数

$page-setConfig('header','会员卡');

$Page-setConfig('prev', "上一页");//上一页

$Page-setConfig('next', '下一页');//下一页

$Page-setConfig('first', '首页');//第一页

$Page-setConfig('last', "末页");//最后一页

$Page - setConfig ( 'theme', '%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%' );

// 进行分页数据查询 注意page方法的参数的前面部分是当前的页数使用 $_GET[p]获取

$nowPage = isset($_GET['p'])?$_GET['p']:1;

$list = $Data-where($map)-page($nowPage.','.$Page-listRows)-select();

$show       = $Page-show();// 分页显示输出

$this-assign('page',$show);// 赋值分页输出

$this-assign('course_card',$list);// 赋值数据集

ThinkPHP5如何对数组进行分页

function array_page($array,$rows){ import("ORG.Util.Page"); //导入分页类 $count=count($array); $Page=new Page($count,$rows); $list=array_slice($array,$Page-firstRow,$Page-listRows); return $list; }//使用该函数即可实现分页

php 里数组$array[] 分页显示

$listArr = array_slice($array, ($page-1)*$pagesize, $pagesize, true);

$page 为页数

如何将php里面的数组内容进行分页显示出来?

1、前言

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

2、原理

所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页多少条记录($PageSize)?

当前是第几页($CurrentPageID)?

现在只要再给我一个结果集,我就可以显示某段特定的结果出来。

至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。

以mysql数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

前10条记录:select * from table limit 0,10

第11至20条记录:select * from table limit 10,10

第21至30条记录:select * from table limit 20,10

……

这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

3、简单代码

请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

?php

// 建立数据库连接

$link = mysql_connect("localhost", "mysql_user", "mysql_password")

or die("Could not connect: " . mysql_error());

// 获取当前页数

if( isset($_GET['page']) ){

$page = intval( $_GET['page'] );

}

else{

$page = 1;

}

// 每页数量

$PageSize = 10;

// 获取总数据量

$sql = "select count(*) as amount from table";

$result = mysql_query($sql);

$row = mysql_fetch_row($result);

$amount = $row['amount'];

// 记算总共有多少页

if( $amount ){

if( $amount $page_size ) //如果总数据量小于$PageSize,那么只有一页

if( $amount % $page_size ){ //取总数据量除以每页数的余数

$page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一

}else{

$page_count = $amount / $page_size; //如果没有余数,则页数等于总数据量除以每页数的结果

}

}

else{

$page_count = 0;

}

// 翻页链接

$page_string = '';

if( $page == 1 ){

$page_string .= '第一页|上一页|';

}

else{

$page_string .= 'a href="/?page=1";第一页/a|a href="/?page='."($page-1).'上一页/a|';

}

if( ($page == $page_count) || ($page_count == 0) ){

$page_string .= '下一页|尾页';

}

else{

$page_string .= 'a href="/?page='."($page+1).'下一页/a|a href="/?page='."$page_count.'尾页/a';

}

// 获取数据,以二维数组格式返回结果

if( $amount ){

$sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";

$result = mysql_query($sql);

while ( $row = mysql_fetch_row($result) ){

$rowset[] = $row;

}

}else{

$rowset = array();

}

// 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果

?

4、OO风格代码

以下代码中的数据库连接是使用的pear db类进行处理

?php

// FileName: Pager.class.php

// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作

Class Pager

{

var $PageSize; //每页的数量

var $CurrentPageID; //当前的页数

var $NextPageID; //下一页

var $PreviousPageID; //上一页

var $numPages; //总页数

var $numItems; //总记录数

var $isFirstPage; //是否第一页

var $isLastPage; //是否最后一页

var $sql; //sql查询语句

function Pager($option)

{

global $db;

$this-_setOptions($option);

// 总条数

if ( !isset($this-numItems) )

{

$res = $db-query($this-sql);

$this-numItems = $res-numRows();

}

// 总页数

if ( $this-numItems 0 )

{

if ( $this-numItems $this-PageSize )

if ( $this-numItems % $this-PageSize )

{

$this-numPages= (int)($this-numItems / $this-PageSize) + 1;

}

else

{

$this-numPages = $this-numItems / $this-PageSize;

}

}

else

{

$this-numPages = 0;

}

switch ( $this-CurrentPageID )

{

case $this-numPages == 1:

$this-isFirstPage = true;

$this-isLastPage = true;

break;

case 1:

$this-isFirstPage = true;

$this-isLastPage = false;

break;

case $this-numPages:

$this-isFirstPage = false;

$this-isLastPage = true;

break;

default:

$this-isFirstPage = false;

$this-isLastPage = false;

}

if ( $this-numPages 1 )

{

if ( !$this-isLastPage )

if ( !$this-isFirstPage )

}

return true;

}

/***

*

* 返回结果集的数据库连接

* 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小

* 如果结果集不是很大,可以直接使用getPageData的方式获取二维数组格式的结果

* getPageData方法也是调用本方法来获取结果的

*

***/

function getDataLink()

{

if ( $this-numItems )

{

global $db;

$PageID = $this-CurrentPageID;

$from = ($PageID - 1)*$this-PageSize;

$count = $this-PageSize;

$link = $db-limitQuery($this-sql, $from, $count); //使用Pear DB::limitQuery方法保证数据库兼容性

return $link;

}

else

{

return false;

}

}

/***

*

* 以二维数组的格式返回结果集

*

***/

function getPageData()

{

if ( $this-numItems )

{

if ( $res = $this-getDataLink() )

{

if ( $res-numRows() )

{

while ( $row = $res-fetchRow() )

{

$result[] = $row;

}

}

else

{

$result = array();

}

return $result;

}

else

{

return false;

}

}

else

{

return false;

}

}

function _setOptions($option)

{

$allow_options = array(

'PageSize',

'CurrentPageID',

'sql',

'numItems'

);

foreach ( $option as $key = $value )

{

if ( in_array($key, $allow_options) ($value != null) )

{

$this-$key = $value;

}

}

return true;

}

}

?

?php

// FileName: test_pager.php

// 这是一段简单的示例代码,前边省略了使用pear db类建立数据库连接的代码

require "Pager.class.php";

if ( isset($_GET['page']) )

{

$page = (int)$_GET['page'];

}

else

{

$page = 1;

}

$sql = "select * from table order by id";

$pager_option = array(

"sql" = $sql,

"PageSize" = 10,

"CurrentPageID" = $page

);

if ( isset($_GET['numItems']) )

{

$pager_option['numItems'] = (int)$_GET['numItems'];

}

$pager = @new Pager($pager_option);

$data = $pager-getPageData();

if ( $pager-isFirstPage )

{

$turnover = "首页|上一页|";

}

else

{

$turnover = "a href='?page=1numItems=".$pager-numItems."'首页/a|a href="/?page=".$pager-PreviousPageID."numItems=".$pager-numItems."'上一页/a|";

}

if ( $pager-isLastPage )

{

$turnover .= "下一页|尾页";

}

else

{

$turnover .= "a href="/?page=".$pager-NextPageID."numItems=".$pager-numItems."'下一页/a|a href="/?page=".$pager-numPages."numItems=".$pager-numItems."'尾页/a";

}

?

需要说明的地方有两个:

这个类仅仅处理数据,并不负责处理显示,因为我觉得将数据的处理和结果的显示都放到一个类里边实在是有些勉强。显示的时候情况和要求多变,不如自己根据类给出的结果处理,更好的方法是根据这个Pager类继承一个自己的子类来显示不同的分页,比如显示用户分页列表可以:

?php

Class MemberPager extends Pager

{

function showMemberList()

{

global $db;

$data = $this-getPageData();

// 显示结果的代码

// ......

}

}

/// 调用

if ( isset($_GET['page']) )

{

$page = (int)$_GET['page'];

}

else

{

$page = 1;

}

$sql = "select * from members order by id";

$pager_option = array(

"sql" = $sql,

"PageSize" = 10,

"CurrentPageID" = $page

);

if ( isset($_GET['numItems']) )

{

$pager_option['numItems'] = (int)$_GET['numItems'];

}

$pager = @new MemberPager($pager_option);

$pager-showMemberList();

?

第二个需要说明的地方就是不同数据库的兼容性,在不同的数据库里截获一段结果的写法是不一样的。

mysql: select * from table limit offset, rows

pgsql: select * from table limit m offset n

......

所以要在类里边获取结果的时候需要使用pear db类的limitQuery方法。

ok,写完收功,希望花时间看完这些文字的你不觉得是浪费了时间。

回答者

另外,虚机团上产品团购,超级便宜

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。