基于PHP多维数组的分页实现(可用于在线购物车等应用)

来源:互联网 发布:arp 绑定 ip mac 编辑:程序博客网 时间:2024/06/04 23:34
一般分页要有一个请求分页的页码变量,即$page;
然后要有一个数据源,这里我用数组分页的技术来讲解,一般可以用于对购物车之类的数据分页。这个变量假定为$data_set;
除此之外还需要有每页显示数据的长度,假定每页显示10个数据,那么这个值为10,那么$page_length=10;

这样我们就得到分页需要的三个必备元素:页码数据源每页数据元素个数

根据这三个元素我们可以得到,元素总个数$num=count($data_set);总页数$page_total=ceil($num/$page_length);

接下来做的就是切分数组进行显示,也就一条语句就可以。

$show=array_slice($data_set,$page_length*(($page>$page_total?$page_total:$page)-1),$page_length);

然后就用模板技术输出$show就可以。

需要上一页、下一页这种的话,可以用下面的方法进行实现。

//使用一个$page_tips数组装载锚点必须的属性值,以方便调试
//请求的页数
$page_tips['page']=$page;
//数组元素总数
$page_tips['page_elem']=$num;
//页面总数
$page_tips['page_total']=$page_total;
//当前页面页码
$page_tips['page_now']=$page>$page_total?$page-1:$page;           
//上一页的页码
$page_tips['page_last']=$page==1?$page:$page-1;
$page_tips['page_last']=$page>$page_total?$page-2==0?1:$page-2:$page_tips['page_last'];
//下一页的页码
$page_tips['page_next']=$page==$page_total?$page_total:$page+1;
$page_tips['page_next']=$page>$page_total?$page_total:$page_tips['page_next'];

输出到模板上面对应的上一页和下一页的a标签上就好了,也就是新的请求$page。

由于页面不仅仅有分页,还有删除操作,如果删除了一行数据需要以ajax方式重新获得一次页面,所以控制页面的显示还是有点难度的。如果用户处在分页的最后一页,那么删除了最后一页的所有数据后就必须要显示出原先倒数最后第二页。实现过程很简单,显示数据在上面切割数组的时候已经给出了,如果提交的页码大于总页数了,那么就显示最后一页。下面的上下页的导航参数也可以用同样的想法来实现,如果请求的页码大于总页数,那么就加一或者减一页,在此之前还有需要判断用户当前所处的页面是否是在首页或者末页。
在得到所有的参数之后就可以使用PHP模板技术将数据呈现倒模板页面上了,要想在首页的时候不显示上一页,末页的时候不显示下一页,这个可以结合js操作,比对 $page_tips['page_now']$page_tips['page_last']$page_tips['page_now']的值,如果相同,那么就隐藏掉该元素。
原创粉丝点击