网站首页 > 文章中心 > 其它

php对数组数据进行分页_php的数组里面可以存储任意类型的数据

作者:小编 更新时间:2023-09-04 18:22:35 浏览量:25人看过

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

①.、前言

php对数组数据进行分页_php的数组里面可以存储任意类型的数据-图1

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

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

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

当前是第几页($CurrentPageID)?

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

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

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

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

......

php对数组数据进行分页_php的数组里面可以存储任意类型的数据-图2

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

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

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

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

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; //如果没有余数,则页数等于总数据量除以每页数的结果

$page_count = 0;

// 翻页链接

$page_string = '';

if( $page == 1 ){

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

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

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

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

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

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

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

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

$rowset[] = $row;

$rowset = array();

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

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

// 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;

$this-numPages = 0;

switch ( $this-CurrentPageID )

case $this-numPages == 1:

$this-isFirstPage = true;

$this-isLastPage = true;

break;

case 1:

$this-isLastPage = false;

case $this-numPages:

$this-isFirstPage = false;

default:

if ( $this-numPages 1 )

if ( !$this-isLastPage )

if ( !$this-isFirstPage )

return true;

/***

*

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

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

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

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

***/

function getDataLink()

if ( $this-numItems )

$PageID = $this-CurrentPageID;

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

$count = $this-PageSize;

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

return $link;

return false;

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

function getPageData()

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

if ( $res-numRows() )

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

$result[] = $row;

$result = array();

return $result;

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;

// FileName: test_pager.php

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

require "Pager.class.php";

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

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

$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 = "首页|上一页|";

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

if ( $pager-isLastPage )

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

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

需要说明的地方有两个:

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

Class MemberPager extends Pager

function showMemberList()

$data = $this-getPageData();

// 显示结果的代码

// ......

/// 调用

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

$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,写完收功,希望花时间看完这些文字的你不觉得是浪费了时间.

回答者

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

php 数组分页显示

这句的算法就不正确了.if(!isset($arr_click[($page?-?1)?*?$size?+?$i]))break;

还有

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

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

$page?=?$page?$pnum?$pnum:?$page;?

}else{?

$page?=?1;?

}?

$page?=?empty($_GET['page'])?'1'?:?$_GET['page'];

这段代码,if 里面已经有page了.后面还要再获取一次page干嘛呢.

望采纳啦.有什么问题可以百度HI我.

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对数组数据进行分页相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章