请教一个 php 算法。分页导航函数

2015-01-03 05:24:23 +08:00
 ab
已知文章

分页变量 $pages
当前页码变量 $num
文章链接 $link

比如第一页为www.xxx.com,第二页www.xxx.com/2

要求输出前后两个分页和首页末页的分页导航。如何写函数比较高效?

比如假设pages为 15

第一页导航为
1 2 3 ... 15
第二页为
1 2 3 4 ... 15
第三页为
1 2 3 4 5...15
第四页导航为
1 2 3 4 5 6...15
第五页为
1...3 4 5 6 7...15
第六为
1...4 5 6 7 8...15

...

...

第13页为
1...11 12 13 14 15
第14页为
1...12 13 14 15
最后一页
1...13 14 15
3973 次点击
所在节点    PHP
9 条回复
msg7086
2015-01-03 06:44:35 +08:00
只说个思路。把首页、当前页向前向后、最后一页扔进数组。然后unique一下。
sumhat
2015-01-03 08:13:03 +08:00
这是一个O(7)的函数,即使写成了O(77),也不影响效率吧
Doubear
2015-01-03 10:54:23 +08:00
楼上的表示都看不懂,我自己的做法是写了个class,要用的时候实例化然后调用对应的方法,输出想要的内容
mcfog
2015-01-03 11:35:37 +08:00
https://gist.github.com/mcfog/2df96e37fc7fe3edbc6e#file-paginator-php-L119
无他,一个for循环里面有复杂的判断而已
feiyuanqiu
2015-01-03 12:37:12 +08:00
这些小东西其实应该自己琢磨的,也没有什么难度,问别人的也不一定就比自己想出来的实现要好。
这是我刚才写的,比较简单:



```php
<?php
function simplePaginator($current, $last, $url_func = null, $start = 1, $range = 2, $rule = '...')
{
$result = range($current - $range > $start ? $current - $range : $start,
$current + $range < $last ? $current + $range : $last);

if (reset($result) != $start) { array_unshift($result, $start, $rule); }
if (end($result) != $last) { array_push($result, $rule, $last); }

if ($url_func && function_exists($url_func)) {
$result = array_map($url_func, $result);
}

return $result;
}

function singlePagiUrl($p)
{
return is_numeric($p)
? "<a href='?p={$p}'>{$p}</a>"
: $p;
}

echo '<pre>';print_r(simplePaginator(16, 15, 'singlePagiUrl'));
?>
```

楼上不要贴 gist 啊,我卡了半天
xoxo
2015-01-03 12:38:26 +08:00
何不用一些前端JS框架来做呢
lincanbin
2015-01-03 12:51:24 +08:00
@xoxo 这样SEO不行。
ab
2015-01-04 02:15:40 +08:00
@mcfog @feiyuanqiu 谢谢
bertonzh
2015-01-04 16:18:44 +08:00
https://github.com/meowtec/page-navigator
这是我前段时间写的分页,一开始用 js 写的,后来用 Python 和 php 重写了两份。
算法在 pageAnalyse 方法中,思路和你的不太一样。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/158755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX