php 防google 分页效果代码_PHP教程

php中文网
发布: 2016-07-20 11:07:02
原创
993人浏览过

function getpagerange($currentpage, $totalpages, $displaysize = 10) {
    if ($totalpages         return array();
    } elseif ($displaysize > $totalpages) {
        $startpage = 1;
        $endpage = $totalpages;
    } else {
        if ($currentpage % $displaysize === 0) {
            $startpage = $currentpage - $displaysize + 1;
        } else {
            while (($currentpage % $displaysize)) {
                --$currentpage;
            }
            $startpage = $currentpage + 1;
        }
        if ($startpage             $startpage = 1;
        }
        $endpage = $startpage + $displaysize - 1;
        if ($endpage > $totalpages) {
            $endpage = $totalpages;
            $startpage = $endpage - $displaysize + 1;
        }
    }
    return range($startpage, $endpage);
}php?name=%ba%af%ca%fd">函数getpagerange接受三个参数,当前页$currentpage,总页数$totalpages,和翻页区间长度$displaysize,默认是10。根据这三个参数,函数getpagerange会生成一个适当的包含了$currentpage的翻页区间。首先,我们需要排除非法的参数值,对于总页数或区间长度小于零的情况,须加以检查。

然后,我们考察静态划分的思路。如前所述,给定翻页区间长度后,便可用总页数除以长度,得到区间个数。与此同时,我们可分析得知并不是所有区间都含有相同的页数,在极端情况下,还会出现总页数小于给定的翻页区间长度,那么划分或切割的结果将永远只有一个区间。幸运的是,这不会给我们的核心算法带来什么干扰,但我们仍须重视代码的健壮性。所以,我们先考虑极端情况,在运用算法解决核心问题之前,先迅速捕捉只有一页的区间。

接下来,我们便可以看看区间的固有属性了。每个动态切割的区间,都有一个起始页和一个尾页;由于区间彼此存在先后顺序,所以在经过静态划分后,我们始终会得到第一个(首)区间和最后一个(尾)区间,若首尾区间重合,则说明总页数小于给定的翻页区间长度。无论如何,算法需要解决的关键问题是如何找到区间的起始页和尾页,一旦确定这两个元素,便可以使用php内置的range函数生成区间内的全部页码。

算法利用当前页$currentpage和翻页区间长度$displaysize做比较,来判断当前页在区间内所处的位置,进而推导出区间起始页和尾页与当前页的偏移量。为了做到完美无缺,我们还要考虑边界溢出的问题,这也非常简单,只需判断起始页和尾页是否介于1和总页数之间即可。

至此,对于代码的分析已经完成。我们来看一下算法的时间效率,通俗地说,算法中的基本操作是求模,算法的执行时间取决于$currentpage与$displaysize的差值,差值越大,则求模次数越多、执行时间越长,呈线性结构。而实际的执行结果则是在瞬间完成的。

下面,我们来结合上面的google搜索结果页,利用getpagerange函数生成一个翻页区间,输入所需参数:
print_r(implode(',', getpagerange(18, 27, 20)));得到的结果是:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20大家会发现这和google搜索结果页显示的完全不一样。对,因为google的翻页区间把当前页强制设置在中间位置上了!嗯,不要灰心,我们仍可以利用getpagerange函数得到与之相匹配的结果,只需把问题再分解一下:
print_r(implode(',', array_merge(getpagerange(17, 17, 10), getpagerange(27, 27, 10))));得到的结果是:
8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445001.htmlTechArticlefunction getPageRange($currentPage, $totalPages, $displaySize = 10) { if ($totalPages = 0 || $displaySize = 0) { return array(); } elseif ($displaySize $totalPages) { $startPage =...
相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号