9.1 分页类
<?php //1 帮助我们完成select语句中的limit部分 //2 应该帮助我们完成页码列表的html部分 /* * 参数说明: * $num 数据的总行数 * $size 每页显示的条数 * $num_btn 页面默认显示的按钮数量 * $page 浏览器传递的当前页 * */ function page($num,$size,$num_btn=10,$page='page'){ //1 验证$page的值 if (!isset($_GET[$page]) || !is_numeric($_GET[$page]) || $_GET[$page]<1) { $_GET[$page] = 1; } //2 计算出总页数 $page_num_all = ceil($num/$size); //3 验证$page的值大于总页数 if ($_GET[$page]>$page_num_all) { $_GET[$page] = $page_num_all;//等于总页数 } //4 求出limit的偏移量 公式:(页数-1)乘以条数 $start = ($_GET[$page]-1)*$size; //5 完成limit $limit = "limit {$start},$size"; echo '当前页'.$_GET[$page].'<br/>'; //-----制作HTML按钮---------- //根据传入函数参数num_btn来显示按钮数目 //一 如果num_btn值大于等于总页码数 $html = []; if ($num_btn >= $page_num_all) { for ($i=1;$i<=$page_num_all;$i++){ if ($_GET[$page] == $i){ $html[$i] .= "<span>{$i}</span>"; } else { $html[$i] .= "<a href='demo.php?page={$i}'>{$i}</a> "; } }//num_btn大于总页码数 我们显示所有的页码数 } //二 如果num_btn值小于等于总页码数 //显示策略:当前页的左右两边的数量应该相等,或者右边比左边多一个 if ($num_btn<$page_num_all){ //1 求出左边的按钮数 $left_btn =floor(($num_btn-1)/2);//(总数 - 当前页)除以2 用到偶数再用floor函数(向下取整) //2 求出最左边的起始页码号 $start = $_GET[$page]-$left_btn;//当前页-左边的按钮数 = 最左边的起始页码值 //3 如果左边 起始页码值小于1 我们就让它等于1 if ($start<1) { $start=1; } //4 最后一个按钮号已经大于总页码数 我们然最后一个按钮等于最大值 $end = $start + ($num_btn-1); if ($end > $page_num_all) { $start = $page_num_all -($num_btn-1);// 起始页码值 + (总页码数-1) = 最后页码值 } for ($i=0;$i<$num_btn;$i++) {//i限制循环次数用的 if ($_GET[$page] == $start) { $html[$start] .= "<span>{$start}</span>"; } else { $html[$start] .= "<a href='demo.php?page={$start}'>{$start}</a> "; } $start++;//显示的页码 } //如果按钮数目大于等于3的时候做 省略号效果 if (count($html)>=3) { reset($html);//将数组的内部指针指向第一个单元 $key_first = key($html); //返回数组中当前单元的键名 //echo '第一个下标'.$key_first.'<br/>'; end($html);//将数组的内部指针指向最后一个单元 $key_end = key($html); //echo '最后一个下标:'.$key_end.'<br/>'; if ($key_first !=1) { array_shift($html);//删除第一个 array_unshift($html,"<a href='demo.php?page=1'>1....</a>");//增加一个 } if ($key_end != $page_num_all) { array_pop($html);//弹出数组最后一个单元 (出栈) array_push($html,"<a href='demo.php?page={$page_num_all}'>{$page_num_all}....</a>"); } } } //添加上一页 if ($_GET[$page] != 1) { $prev = ($_GET[$page] -1); array_unshift($html,"<a href='demo.php?page={$prev}'>上一页</a>"); } //添加下一页 if ($_GET[$page] != $page_num_all) { $next = ($_GET[$page]+1); array_push($html,"<a href='demo.php?page={$next}'>下一页</a>"); } $html = implode('',$html);//将一个一维数组的值转化为字符串 //定义返回的数组 $data['limit'] = $limit; $data['html'] = $html; return $data; } $page = page(100,5,10); echo $page['html'];
电放费

浙公网安备 33010602011771号