【文章摘要】文章列表有了,自然离不开分页功能。这一节我们来做一个简易的分页功能。请不要小看分页功能,我将通过两节课程来分开讲解分页功能的实现。让我们来看看一个看似简单的分页功能,实现起来是需要多么复杂的逻辑关系的。
首先为了查看分页效果,请先创建好充足的文章。(最起码25个以上)
打开ar页面,把SELECT * FROM article部分改成如下代码:
运行之后可以看到原来有一堆数据的文章列表就剩了10条最新的数据。
代码中新增的部分是LIMIT 0,10。通过查询MYSQL获得结果集的时候我们可以通过LIMIT来指定返回的数据起始位置和记录数。
LIMIT在英文中是界限的意思,同样的道理我们通过2个数字给需要返回的数据划了界限。第一个数字代表的是起始位置,第二个数字代表的是需要返回的记录数量。
关于起始位置需要注意,当数值为0的时候才是从第一条数据开始返回,当数值为1的时候从第二条数据开始返回,以此类推,也就是从第+1条数据开始返回。
LIMIT 0,10是的意思就是从第一条数据开始返回一共10条数据。当改成LIMIT 10,10的时候就意味着从第11条数据开始返回一共10条数据,也就是返回第11-20的数据。
那也就是说假设我们每一页要显示10个文章的话,LIMIT 0,10是第一页,LIMIT 10,10就是第二页,LIMIT 20,10就是第三页,以此类推。
那如何计算第X页的起始位置是多少呢?第1页是0,第2页是10,第3页是20。假设我们的第X页的起始位置为Y,不难想象 Y=(X-1)*10。
这时候我们基本上也就可以联想到,只要我们通过一个参数告诉这个页面X值是多少,就可以通过X计算出Y,并且在LIMIT后方带入Y的值就可以实现想看第几页就看第几页的效果了。
之前我们有讲到过通过form表单的post方法向服务器提交参数,也可通过get方法向URL提交参数,这次我们就用get方法提交一个参数到URL告知我们需要查看第几页。
PS:POST方法也可以实现,不过某些时候用GET方法比较省事(后面会讲到)
打开ar页面,在栏目列表的表格的结束位置/table下方增加如下代码:
代码分析:
我们创建了一个方法为get的表单,并可通过name为page的input文本框像URL提交参数page的值,除了POST以外我有说过还有get方法直接把参数提交到链接地址url里去。
在ar中把SELECT * FROM article ORDER BY add_time DESC LIMIT 0,10部分代码删掉。
打开ar页面在include(‘ar’);页面上方增加如下代码:
注意:要放在 else{}内。当然不是说放到if语句外面不行,只不过这段代码我们只需要在进入列表页面的时候执行就可以了,所以放到外面无疑是降低执行效率。
代码分析:
第1行、通过if($_GET[‘page’])来判断$_GET[‘page’]值是否存在。在if条件语句中可以以if(变量)的形式来判断该变量值是否存在,有值意味着条件成立,无值意味着条件不成立。
第2行、当条件成立的时候把$_GET[‘page’]的值赋值到变量$page,在这里变量$page就是之前公式中的x,为了方便理解我用了$page来表示当前页面。
第4行、条件不成立是$page的值被赋值为1,也就是$page的默认值是1。
第6行、$snum就是之前的Y,通过公式计算出起始位置$snum的数值。这个运算公式跟我们一般的数学公式没有差别,只不过在程序中用“*”来表示乘法符号,因为键盘上没有“×”符号。
第7行、把$snum的值带入到了LIMIT后方。
好了,现在运行列表页面看看我们的成果吧(为了方便查看地址栏的变化请直接在浏览器中打开http://127.0.0.1/cainiao/admin/ar,不要从框架的左侧栏目里点进去)!在文本框中输入页码点击提交提交按钮就可以翻页查看了有木有!
但是有个问题,假设我们有25个文章,并且每页显示10条的话,那一共就是3页,翻到第4页,第5页都是没有意义的。好歹应该告诉一下用户一共有多少页吧。
下面就来讲解如何计算出总页数。
也不难想象,总页数当然是需要用文章总数和每页显示的文章数量来换算得出。
先看看几个情况。
假设我们每页显示10个文章,文章一共有10条的时候就是1页,20条、30条、40条的时候2页、3页、4页。这个数字很容易得到,只要总数除以每页文章数10就可以得到。
但是当文章有1、2、3…9条的时候是1页,有11、12、13…19条的时候是2页,21、22、23…29的时候3页。
如果总数除以10我们就会得到0.1、0.2、0.3的时候是1页,1.1、1.2、1.3的时候是2页,2.1、2.2、2.3的时候是3页。
其中的规律不难发现页数是我们除以10之后获得的结果数的整数部分+1。
根据以上规律我们可以得出如下结论:
1. 当文章总数除以每页文章数的结果为整数的时候,总页数=文章总数除以每页文章数。
2. 当文章总数除以每页文章数的结果不是整数的时候,总页数=(文章总数除以每页文章数)取整数部分+1
OK,我们现在就可以根据我们得出的结论写出如下代码了,打开ar在if($_GET[‘page’]){上方加入下方代码:
代码分析:
第1行,我们定一个了一个变量$pnum并给其赋值10,作为每页显示的文章数来用。因为10这个数字在下方代码种要多次出现,所以我们定一成一个变量好方便我们随时修改每页显示的数量。
第2行,通过SELECT COUNT(*) FROM article的mysql指令返回了article表中的记录数,这个很好记,COUNT不就是数数的意思吗?比我们之前的SELECT * FROM语句就多了一个数数而已。
在这一行获得的结果和SELECT * FROM方式来获得结果一样,他也只是个结果集而已,只不过该结果里只有一行数据,这一行数据就是记录数(文章总数)
第3行,通过mysql_result函数返回该结果集中一个字段的值(文章总数)并赋值到了变量$sum。括号中$s是用来指定需要返回的结果集,0是用来指定起始位置,跟LIMIT类似0代表着返回第一行,因为$s中只有一行数据所以如果把0改成1或者其他数字就会出现错误,因为没有第二行或者更多的数据。mysql_result函数的正确写法是mysql_result(结果集,行号,字段名)。其中字段名是可以省略的,如果省略字段的话会显示第一个字段的值。在我们的结果集$s中只有一个字段,该字段名是COUNT(*),所以指定不指定无所谓。如果这里不好理解的话可以利用我们之前的mysql_fetch_array,把$s转换成一个数组并赋值到一个字段里,再用print_r来打印这个字段看看这个数组是什么结构的,基本上就能理解了。
第4行、不知道大家还记不记得小学数学里学过的“余数”,当3除2的时候余数为1,当7除4的时候余数为3,当8除4的时候余数为0。在PHP程序中%就是获得余数的运算符。那$sum%$pnum==0的意思自然就是文章总数除以每页显示的文章数的余数是等于0的时候,也就是说是整数的时候。
第5行、当满足上面的条件的时候,变量$pages(总页数)的值是 $sum/$pnum,其中符号“/”是代表着“除”。
第7行、floor是一个用于取整数的一个函数,返回一个不大于括号中数字的最大整数。floor)返回的是2,floor)返回的是0,floor)返回的是-2。floow在英文中是楼层的意思,我们设想一下一只虫子飞在2层和3层之间,它不就在2层吗?飞在地下1层和地下2层之间,它不就在地下2层吗?floor就是返回楼层,就这么记!
好了,所有我们需要的变量都已经得到了,我们来把他输出出来,打开ar在form表单前面加入如下代码:
运行之后就可以把文章数、页数、当前页显示出来了。
这样基本上完全可以满足一个网页的分页需求了。不过用户体验很不好!
1.文章《[php数组怎么分页]php怎么实现分页…》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《[php数组怎么分页]php怎么实现分页…》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好