本文介绍一种不依赖
内置函数(如 range)、纯数学逻辑驱动的 for 循环方案,根据最大页数和当前索引,精准输出包含“前一项 + 当前项 + 后两项”共 4 个数字的序列,并自动适配首尾边界(如当前为 1 或末位时自动收缩显示范围)。
要实现“显示当前项、其前一项及后两项(共最多 4 个连续数字)”,同时严格满足边界约束(最小为 1,最大不超过 $pager_max),关键在于动态计算循环起始与终止位置,而非硬编码条件判断。原始代码中使用 ($current - $pager_max) + 6 等表达式缺乏可读性且逻辑错误,正确思路是:
✅ 正确解法(纯 for 循环,无函数调用):
$pager_max) ? $pager_max - 3 : $current - 1);
$end = ($current == 1) ? 4 : (($current + 2 > $pager_max) ? $pager_max : $current + 2);
// 确保 start 不小于 1,end 不大于 pager_max(双重兜底)
$start = ($start < 1) ? 1 : $start;
$end = ($end > $pager_max) ? $pager_max : $end;
for ($i = $start; $i <= $end; $i++) {
// 高亮当前项
$output = ($i == $current) ? "**{$i}**" : $i;
echo $output . '
';
}
?>? 运行效果验证($pager_max = 8):
? 关键说明:
总结:边界感知的邻域提取,核心不在循环本身,而在于用代数方式严谨求解有效索引区间。掌握 start = max(1, current−1, pager_max−3) 的等价三元展开,即可在任何无函数环境中稳健复现此逻辑。