Php 用于隐藏分页的循环编号

Php 用于隐藏分页的循环编号,php,for-loop,Php,For Loop,我有一个这样的循环 <?php for($i = 0; $i <$size; $i++) { ?> <li> <a pagenumber="<?php $i+1?>" class="pagination" href="#"><?php $i+1?></a></li> <?php } ?> 1 2 3 4 5 .... 98 99 100 但这里的问题是,当一个100页的页

我有一个这样的循环

 <?php for($i = 0; $i <$size; $i++) { ?>
   <li>
     <a pagenumber="<?php $i+1?>" class="pagination" href="#"><?php $i+1?></a></li>
 <?php } ?>
1 2 3 4 5 .... 98 99 100
但这里的问题是,当一个100页的页面上有很多数字时,我怎么能做这样的事情呢

 <?php for($i = 0; $i <$size; $i++) { ?>
   <li>
     <a pagenumber="<?php $i+1?>" class="pagination" href="#"><?php $i+1?></a></li>
 <?php } ?>
1 2 3 4 5 .... 98 99 100
没有从1到100的数字只要不断出现 例如,当我单击5时,它应该显示
67889…9899100

或者更好的是,我不知道该怎么做,你不需要循环。
您可以使用array_slice和内爆来获得预期的输出

我添加了$n,让您可以选择在所选页面之前输出一页(如果未选择第1页)

$pages = range(1,100); // range(1, $size);
$page = 1; // page selected by user
if($page ==1){
    $n = 0;
}else{
    $n = 1;
}

echo implode(" ", array_slice($pages, $page-1-$n, 5)) . " . . . . " . Implode(" ", array_slice($pages, -3));
输出:

1 2 3 4 5 . . . . 98 99 100
选择第5页后:

4 5 6 7 8 . . . . 98 99 100


如果你想留在循环中,那么你可以使用两个循环和一个可选的回音

$size =100;
$page = 5;

// Echo one page prior to selected page
if($page != 1){
    Echo '<a pagenumber="' . ($page-1) .'" class="pagination" href="#">' . ($page-1) . '</a></li>';
    Echo ' . '; // show dot for current page
}

// Echo +1 -> +5 
For($i = $page+1; $i < $page+6; $i++){
    Echo '<a pagenumber="' . $i .'" class="pagination" href="#">' . $i . '</a></li> ';
}
Echo '. . . . ';

// Echo last three pages
For($i = $size-3; $i <= $size; $i++){
    Echo '<a pagenumber="' . $i .'" class="pagination" href="#">' . $i . '</a></li> ';
}
$size=100;
$page=5;
//回显所选页面之前的一页
如果($page!=1){
回音“”;
Echo“.”;//显示当前页面的点
}
//回声+1->+5
对于($i=$page+1;$i<$page+6;$i++){
回音“”;
}
回音“…”;
//回音最后三页

对于($i=$size-3;$i您不需要循环。
您可以使用array_slice和内爆来获得预期的输出

我添加了$n,让您可以选择在所选页面之前输出一页(如果未选择第1页)

$pages = range(1,100); // range(1, $size);
$page = 1; // page selected by user
if($page ==1){
    $n = 0;
}else{
    $n = 1;
}

echo implode(" ", array_slice($pages, $page-1-$n, 5)) . " . . . . " . Implode(" ", array_slice($pages, -3));
输出:

1 2 3 4 5 . . . . 98 99 100
选择第5页后:

4 5 6 7 8 . . . . 98 99 100


如果你想留在循环中,那么你可以使用两个循环和一个可选的回音

$size =100;
$page = 5;

// Echo one page prior to selected page
if($page != 1){
    Echo '<a pagenumber="' . ($page-1) .'" class="pagination" href="#">' . ($page-1) . '</a></li>';
    Echo ' . '; // show dot for current page
}

// Echo +1 -> +5 
For($i = $page+1; $i < $page+6; $i++){
    Echo '<a pagenumber="' . $i .'" class="pagination" href="#">' . $i . '</a></li> ';
}
Echo '. . . . ';

// Echo last three pages
For($i = $size-3; $i <= $size; $i++){
    Echo '<a pagenumber="' . $i .'" class="pagination" href="#">' . $i . '</a></li> ';
}
$size=100;
$page=5;
//回显所选页面之前的一页
如果($page!=1){
回音“”;
Echo“.”;//显示当前页面的点
}
//回声+1->+5
对于($i=$page+1;$i<$page+6;$i++){
回音“”;
}
回音“…”;
//回音最后三页

对于($i=$size-3;$i请不要使用不相关的标记。如果代码中没有jquery或javascript,很可能您不想标记它们。如果我单击5,我至少会有4个标记也可见。^同意可以做
first/prev/111314141517181920/next/last
说如果您在15上。有很多方法。找到一个e例如,您想要什么?不是真正的答案,但可能是一些框架如何处理分页?或者只是使用列排序进行无限滚动,因为这是人们实际使用“大”的方式数据表。请不要使用不相关的标记。如果你的代码中没有jquery或javascript,你可能不想标记它们。如果我单击5,我至少会看到4个。同意可以做
first/prev/11213151617181920/next/last
说如果你在15。有很多方法可以做到。找一个例子你到底想要什么?不是真正的答案,但可能是一些框架如何处理分页?或者只是使用列排序进行无限滚动,因为这就是人们实际使用“大”数据表的方式。次要优化:
$n=($page==1)?0:1;
节省了4行代码且易于阅读。我不喜欢ternary,因为它们更难阅读。但这是我的偏好。我怀疑它会让代码更快,因此这只是旁观者的眼睛。它会让代码更快一点,因为PHP的lex文本更少,但几乎可以忽略不计。我不喜欢tanary,但状态很短那样的话,我不会在上面说的。但是,正如你所说的,偏好。如果它在循环中使用,我会考虑它,但是因为它是一个语句,我尽量使它们尽可能清楚。次要优化:<代码> $n=($PAGE=1)。?0:1;
节省了4行代码且易于阅读。我不喜欢ternary,因为它们更难阅读。但这是我的偏好。我怀疑它会让代码更快,因此这只是旁观者的眼睛。它会让代码更快一点,因为PHP的lex文本更少,但几乎可以忽略不计。我不喜欢tanary,但状态很短那样的话,我不会在上面说的。但是正如你所说的,偏好。如果它在循环中使用,我会考虑它,但是因为这是一次声明,我尽量使它们尽可能清楚。