2012-10-01 77 views
1

我試圖建立一個日曆系統,將顯示3個迷你日曆月。上個月,本月和下個月。移動陣列內部指針超過最大執行時間

下面的代碼應該只是將數組指針移動到當前月份。我認爲這是一個星期五(9月28日),但今天上午(10月1日),它會導致在日誌中出現以下錯誤: PHP Fatal error: Maximum execution time of 30 seconds exceeded

我懷疑這是一個新的月份有什麼關係呢,但我掌握想法。我希望有人能看到我在這裏做錯了什麼,因爲這一切對我來說都是正確的。

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

$arrMonths = array('01' => 'January', '02' => 'February', '03' => 'March', '04' => 'April', 
        '05' => 'May', '06' => 'June', '07' => 'July', '08' => 'August', 
        '09' => 'September', '10' => 'October', '11' => 'November', '12' => 'December'); 

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

回答

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. 
+2

其實日期( 'M' 的'返回值,time());'是一個字符串,當它們大於等於10時,這些鍵是整數。反之亦然,但這就是'var_dump'告訴我的。雖然鬆開比較運算符仍然是正確的答案。 – MiDo

+0

呵呵。這就是我不會var_dump所有東西時所獲得的結果。我將編輯更改 - 謝謝! – andrewsi

+0

這可以解釋爲什麼星期五的時候,關鍵是'09'。謝謝@MiDo。 謝謝你@andrewsi!現在,你指出這是非常有道理的。 – dusk