我正在尝试将old vbscript function转换为php函数并运行我运行它,它似乎陷入无限循环。这是脚本:
<?php
function pagination($str,$max_pg){
$pg = (int)$str;
$max_pg = (int)$max_pg;
if($max_pg <= 1){
exit();
}
$pstrout = '<table cellpadding="0" cellspacing="0" border="0">\r';
$pstrout .= '<tr class="f5">\r';
$pstrout .= '<td align="center" class="npagecounter" style="height:20px;color:#0000FF">\r';
if ($pg >= 2){
$pstrout .= '<a href="pg=1" id="Page1Link">« First</a> \r';
}
if (pg >=2){
$pstrout .= '<a href="pg='.($pg-1).'" id="Page'.($pg- 1).'Link">« Previous</a> \r';
}
if (max_pg > 5){
$npage_t = $pg + 4;
$npage_count_diff = $max_pg - $pg;
if ($npage_count_diff == 0){
$npage_count_diff2 = 4;
}elseif ($npage_count_diff == 1){
$npage_count_diff2 = 3;
}elseif ($npage_count_diff == 2){
$npage_count_diff2 = 2;
}else{
$npage_count_diff2 = 1;
}
if ($npage_t > $max_pg){
if ($npage_count_diff <= 3){
for ($ipages=$pg-$npage_count_diff2;$ipages=$max_pg;$ipages++){
if($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span>';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}else{
for ($ipages=$pg;$ipages=$max_pg;$ipages++){
if ($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span>';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}
}else{
if ($pg == 1){
for ($ipages=$pg;$ipages=($pg+4);$ipages++){
if ($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span>';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}elseif ($pg == 2){
for ($ipages=($pg-1);$ipages=($pg+3);$ipages++){
if ($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span>';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}else{
for ($ipages=($pg-2);$ipages=($pg+2);$ipages++){
if ($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span>';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}
}
}else{
for ($ipages=1;$ipages=$max_pg;$ipages++){
if ($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span> ';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}
if ($max_pg > 1){
if ($pg <> $max_pg){
$pstrout .= '<a href="?pg='.($pg+1).'" id="Page'.($pg+1).'Link">Next »</a> ';
}
}
if ($max_pg > 1){
if ($pg <> $max_pg){
$pstrout .= '<a href="?pg='.$max_pg.'" id="Page'.$max_pg.'Link">Last »</a>';
}
}
$pstrout .= '</td>\r';
$pstrout .= '</tr>\r';
$pstrout .= '<tr>\r';
$pstrout .= '</table>\r';
return $pstrout;
}
$current_page = 2;
$total_page = 24;
echo pagination($current_page,$total_page);
?>
我可能有一个支架不合适。请帮助我解决这个问题,无限循环。
非常感谢!
答案 0 :(得分:1)
您错误地使用了比较运算符,有几次,您正在使用赋值运算
for ($ipages=$pg-$npage_count_diff2;$ipages=$max_pg;$ipages++)
$ipages=$max_pg;
应为$ipages==$max_pg;
可能会更好
$ipages<=$max_pg;
就像只有==它只有在达到$ max_pg时才会停止,可能会有一个实例,它跳过$ max_pg并且永远不会命中它。
答案 1 :(得分:1)
第二个循环
}else{
for ($ipages=$pg;HERE --> $ipages=$max_pg <---HERE;$ipages++){
if ($ipages == $pg){
$pstrout .= '<span style="padding:2px 6px" class="fb">'.$ipages.'</span>';
}else{
$pstrout .= '<a href="?pg='.$ipages.'" id="Page'.$ipages.'Link">'.$ipages.'</a> ';
}
}
}
答案 2 :(得分:1)
你的for循环是错误的。
改变这个:
for ($ipages=$pg;$ipages=$max_pg;$ipages++){
到此:
for ($ipages=$pg;$ipages<=$max_pg;$ipages++){
您需要为所有for循环执行此操作,并根据您的问题的注释进行更改。代码中可能还有其他错误,但这是一个很好的起点。
我对您的代码进行了一些其他更改,并将其添加到PHP Fiddle:http://phpfiddle.org/api/raw/qdt-r7t逻辑似乎仍然无法正常工作,但该页面应该是一个很好的起点。
此外,此类问题更适合代码审核网站:https://codereview.stackexchange.com/?as=1
答案 3 :(得分:1)
我在您的代码中添加了一些echo来运行快速测试:
if ($pg == 1){
for ($ipages=$pg;$ipages=($pg+4);$ipages++){
echo "case 0 ".$ipages." ... ";
[....]
}
} else if ($pg == 2){
for ($ipages=($pg-1);$ipages=($pg+3);$ipages++){
echo "case 1 ".$ipages." ... ";
[...]
}
} else {
for ($ipages=($pg-2);$ipages=($pg+2);$ipages++){
echo "case 2 ".$ipages." ... ";
[...]
}
}
我得到了以下结果:
case 1 5 ... case 1 5 ... case 1 5 ... case 1 5 ... case 1 5 ... case 1 5 ...
您应该像其他人提到的那样更换您的运营商