好吧,我有一个工作脚本(见下文),但它看起来很笨拙和多余;在我的辩护中,我在很多个月前编写了这段代码,但这不是重点。我很好奇是否有人对编写此代码的更有效方式有想法,循环和条件更少,以及代码中的噪音。
有问题的代码:
private function pageLinks($num, $page = 1, $search = false, $ne = false) {
$query = ($search) ? '&query='.$search : null;
$by = (is_numeric($ne)) ? '&by='.$ne : null;
$links = 'Page(s):<a href="search.php?page=1' . $query . $by . '" class="tableLink">1</a>';
$count = 1;
$npp = $this->numPerPage;
$buttons = 9;
$half = 4;
for($i = 1; $i <= $num; $i++) {
if(($i%$npp) === 0) {
$count++;
}
}
if($count < $buttons) {
for($i = 2; $i <= $count; $i++) {
$links .= '<a href="search.php?page=' . $i . $query . $by . '" class="tableLink">' . $i . '</a>';
}
} elseif($page <= ($half + 2)) {
for($i = 2; $i <= $buttons; $i++) {
$links .= '<a href="search.php?page=' . $i . $query . $by . '" class="tableLink">' . $i . '</a>';
}
$links .= '...<a href="search.php?page=' . $count . $query . $by . '" class="tableLink">' . $count . '</a>';
} elseif($page <= ($count - ($half + 2))) {
$links .= '...';
for($i = $half; $i > 0; $i--) {
$links .= '<a href="search.php?page=' . ($page - $i) . $query . $by . '" class="tableLink">' . ($page - $i) . '</a>';
}
$links .= '<a href="search.php?page=' . ($page - $i) . $query . $by . '" class="tableLink">' . ($page - $i) . '</a>';
for($i = 1; $i <= $half; $i++) {
$links .= '<a href="search.php?page=' . ($page + $i) . $query . $by . '" class="tableLink">' . ($page + $i) . '</a>';
}
$links .= '...<a href="search.php?page=' . $count . $query . $by . '" class="tableLink">' . $count . '</a>';
} else {
$links .= '...';
for($i = $buttons - 1; $i >= 0; $i--) {
$links .= '<a href="search.php?page=' . ($count - $i) . $query . $by . '" class="tableLink">' . ($count - $i) . '</a>';
}
}
return($links);
}
该方法是这样调用的:
$links = $this->pageLinks($count, $page, $url, $ne);
变量是这样的:
$count
= 数据库中的客户总数(int)
$page
= 要构建的当前页面(int)
$url
= 搜索的名称或电子邮件(String)
$ne
= 按名称 (1) 或电子邮件 (2) 用于搜索字符串(int)
输出类似于(作为链接):
页数:1
2
3
4
5
6
7
8
9
...33
或者如果你在中间(第 20 页):
页数:1
... 16
17
18
19
20
21
22
23
24
...33
现在这并不总是通过搜索函数调用,因此和的默认值$url
,$ne
但这不是很重要。我的问题是有一种更清洁的方法来处理这些链接的构建吗?还是我被这组循环困住了?