当前位置: 首页 > 知识库问答 >
问题:

PHP上的无限循环

湛文乐
2023-03-14

首先,我不是程序员(只是对PHP有一些了解)。我制作了一个带有事件列表的网站,其中有一个选择字段,每月使用Ajax加载过滤事件。

该代码在大约3个月的时间里运行良好。但5天前,它突然停止工作,开始生成一个无限循环。

我调试了代码,发现问题出在“同时”循环上。我试图理解为什么这在一段时间内是完美的,然后它就不会了。(用无限循环崩溃服务器)。

这个函数只给出下个月的第一天。很好用。

function first_day_next_month($month, $year){

  $month = str_replace("0", "", $month);

  if ($month == 12){
    return ($year+1)."0101";
  }else{
    return $year.str_pad($month+1, 2, "0", STR_PAD_LEFT )."01";
  }

}

这一个,为选择字段生成“选项”:

function ddown(){

  $start = strtotime("10 December 2017");

  $end = strtotime("+3 months");

  $current = $start;

  $meses = array(

    "Jan" => "enero",
    "Feb" => "febrero",
    "Mar" => "marzo",
    "Apr" => "abril",
    "May" => "mayo",
    "Jun" => "junio",
    "Jul" => "julio",
    "Aug" => "agosto",
    "Sep" => "septiembre",
    "Oct" => "octubre",
    "Nov" => "noviembre",
    "Dec" => "diciembre"

    );
  $o = "";

  $selected = "";
  $cls = " class=\"gray-out\"";
  while ($current < $end){

    if(date("m", $current) == date("m", strtotime("today")) AND date("Y", $current) == date("Y", strtotime("today"))){
      $selected = " selected=\"selected\"";
      $cls = "";
    }else{
      $selected = "";
    }



    $current = strtotime(first_day_next_month( date("m", $current), date("Y", $current) ));
  }

  return $o;

}

我发现这段代码现在正在生成infinte循环:

while ($current < $end){

    if(date("m", $current) == date("m", strtotime("today")) AND date("Y", $current) == date("Y", strtotime("today"))){
      $selected = " selected=\"selected\"";
      $cls = "";
    }else{
      $selected = "";
    }



    $current = strtotime(first_day_next_month( date("m", $current), date("Y", $current) ));
  }

$current变量未在同时更新。据我所知,这应该是2017年12月10日到今天的3个月,以及这些日期之间每个月的输出和“选项”。

关于如何解决这个问题有什么建议吗?。

(对不起我的英语)。

谢谢

共有1个答案

常彭薄
2023-03-14

在你的第一天下个月的活动中,你有:

$month = str_replace("0", "", $month);

这将用1代替10,每年10月恢复到1月。

 类似资料:
  • 我有2个JTextFields: 对于如何实现该行为的任何帮助都非常感谢,因为我必须为至少10个其他文本字段执行此操作。 谢谢你!

  • 在连接上创建infinte循环!很奇怪,直到现在才发生。我不知道出了什么问题。我试图重建包,我复制一些代码从旧的源代码和相同的结果...

  • 我有一个(Laravel)命令。该命令是做卷曲到一个网站,这是某种网站检查。当服务器关闭时,我想回声出来的东西,但它应该只有一次。 我试过这个代码。不起作用。它不断回响。现在我被卡住了。 我知道上面的代码会一直回响。 目标是当函数从返回true并再次返回true时,它将第二次只回响一次,以此类推。 我希望这个信息是明确的。 还有比这更好的解决办法吗?

  • 问题内容: 我显然面临着一个无限循环,如以下代码所示 一些相关问题解释了为什么如果输入流为true总是返回true ,但是我正在扫描一个。 请让我知道我要去哪里了。 我正在尝试计算唯一整数值​​的总和(它们出现的位置用空格分隔)。 编辑: 获得的经验教训 不会将指针移到下一行,因此扫描仪不会越过任何输入。正如在此问题的答案中以及此处所解释的。 问题答案: 好吧,据 如果此令牌不是,扫描仪将不会使用

  • 问题内容: 请看下面的Java 无限循环。它导致其下面的语句的编译时错误。 以下相同的无限循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。 同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量为true,但编译器根本没有抱怨。为什么? 编辑:显然,以下版本的卡在无限循环中,但是即使循环中的条件始终存在,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l