1

我正在尝试构建一个显示 3 个迷你日历月的日历系统。上个月,这个月,下个月。

下面的代码应该只是将数组指针移动到当前月份。我以为它在星期五(9 月 28 日)工作,但是今天早上(10 月 1 日)它在日志中导致以下错误: PHP Fatal error: Maximum execution time of 30 seconds exceeded

我怀疑这是一个新的月份与它有什么关系,但我正在抓住想法。我希望有人能看到我在这里做错了什么,因为这对我来说都是正确的。

$thisMonth = date('m', time());

$arrMonths = array('01' => '一月', '02' => '二月', '03' => '三月', '04' => '四月',
                    '05' => '五月', '06' => '六月', '07' => '七月', '08' => '八月',
                    '09' => '九月', '10' => '十月', '11' => '十一月', '12' => '十二月');

而(键($arrMonths)!== $thisMonth)
    下一个($arrMonths);
4

1 回答 1

2

这是因为您使用的是严格的比较运算符:

while (key($arrMonths) !== $thisMonth) 
    next($arrMonths);

!==正在尝试匹配密钥的类型和内容;在这种情况下,因为您已经用单引号声明了它们,所以您的键是字符串。它无法进行类型比较(您正在将字符串与整数进行比较),因此它进入了无限循环。

要修复它,只需使用更宽松的比较运算符:

while (key($arrMonths) != $thisMonth) 
    next($arrMonths);

感谢@MiDo - 我实际上弄错了:

the return value of date('m', time()); is a string and the keys are integers when they are >= 10.
于 2012-10-01T16:45:17.117 回答