gpt4 book ai didi

php - 分页问题 [PHP]

转载 作者:行者123 更新时间:2023-12-04 17:18:14 26 4
gpt4 key购买 nike

所以我在 PHP 中执行此操作,但这是一个逻辑问题,因此我将尝试尽可能通用地编写它。

首先介绍分页脚本的工作原理:

  1. for(绘制前三页链接)
  2. 如果(画省略号(...)如果#1 的页面和#3 的页面之间有页面)
  3. for(绘制当前页面及其两侧的两个页面链接)
  4. 如果(画省略号(...)如果#3 的页面和#5 的页面之间有页面)
  5. (绘制最后三页链接)

问题是当页面数量较少时(我在页面计数为 10 时注意到这一点)应该有一个省略号但没有被绘制。

进入代码:

$page_count = 10; //in actual code this is set properly
$current_page = 1; //in actual code this is set properly

for ($i = 1;$i <= 3;$i++)
{
if ($page_count >= $i)
echo $i;
}

if ($page_count > 3 && $current_page >= 7)
echo "...";

for ($i = $current_page - 2;$i <= current_page + 2;$i++)
{
if ($i > 3 && $i < $page_count - 2)
echo $i;
}

if ($page_count > 13 && $current_page < $page_count - 5)
echo "...";

for ($i = $page_count - 2;$i <= $page_count;$i++)
{
if ($page_count > 3)
echo $i;
}

所以我认为最好的办法是修改两个省略号 if 语句中的一个以包含这样的情况,但是我已经尝试过并且被难住了。

另请注意,为了便于阅读,我压缩了这段代码,所以请不要给出诸如“那些 for 循环无效,因为它们会为每次迭代重新计算 current_page - 2”之类的提示,因为我知道:)


对于那些想要查看此逻辑当前如何工作的分割的人,这里是示例输出(已修改),其中迭代了 $page_count 和 $current_page。 http://rafb.net/p/TNa56h71.html

最佳答案

<?php

/**
* windowsize must be odd
*
* @param int $totalItems
* @param int $currentPage
* @param int $windowSize
* @param int $anchorSize
* @param int $itemsPerPage
* @return void
*/
function paginate($totalItems, $currentPage=1, $windowSize=3, $anchorSize=3, $itemsPerPage=10) {
$halfWindowSize = ($windowSize-1)/2;

$totalPages = ceil($totalItems / $itemsPerPage);
$elipsesCount = 0;
for ($page = 1; $page <= $totalPages; $page++) {
// do we display a link for this page or not?
if ( $page <= $anchorSize ||
$page > $totalPages - $anchorSize ||
($page >= $currentPage - $halfWindowSize &&
$page <= $currentPage + $halfWindowSize) ||
($page == $anchorSize + 1 &&
$page == $currentPage - $halfWindowSize - 1) ||
($page == $totalPages - $anchorSize &&
$page == $currentPage + $halfWindowSize + 1 ))
{
$elipsesCount = 0;
if ($page == $currentPage)
echo ">$page< ";
else
echo "[$page] ";
// if not, have we already shown the elipses?
} elseif ($elipsesCount == 0) {
echo "... ";
$elipsesCount+=1; // make sure we only show it once
}
}
echo "\n";
}

//
// Examples and output
//

paginate(1000, 1, 3, 3);
// >1< [2] [3] ... [98] [99] [100]

paginate(1000, 7, 3, 3);
// [1] [2] [3] ... [6] >7< [8] ... [98] [99] [100]

paginate(1000, 4, 3, 3);
// [1] [2] [3] >4< [5] ... [98] [99] [100]

paginate(1000, 32, 3, 3);
// [1] [2] [3] ... [31] >32< [33] ... [98] [99] [100]

paginate(1000, 42, 7, 2);
// [1] [2] ... [39] [40] [41] >42< [43] [44] [45] ... [99] [100]

关于php - 分页问题 [PHP],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com