2013-05-27 24 views
0

我收到一個致命錯誤。這裏錯過了什麼?預先感謝您的幫助。我正在學。我正在測試以查看特定日期之間哪些日期是開放的。致命錯誤:允許的內存大小67108864字節耗盡(試圖分配35個字節)在/home/content/08/10674308/html/Arraytest.php上線15

<?php 
$query = 'SELECT venueprofile.venuename, venueprofile.capacity, venueprofile.contact,   venueprofile.EmailAddress, venueprofile.tele, venueprofile.st, venueprofile.city,  showdate.show_date, showdateid' 
    . ' FROM `venueprofile` ' 
    . ' INNER JOIN `showdate` ON venueprofile.venueid = showdate.venueid' 
    . ' WHERE show_date BETWEEN \'2013-06-15\' AND \'2013-06-25\'' 
    . ' AND capacity BETWEEN 500 AND 3000 ' 
    . ' '; 


$startDate = '$date1'; 
$enddate = '$date2'; 
$dates = array($startDate); 
while ($startDate != $enddate) { 
$startDate = date('Y-m-d', strtotime($startDate . ' +1 day')); 
$dates[] = date; 
} 
; 


$bookings = array("2013-06-16","2013-06-20"); 
foreach ($dates as $date) { 
if (in_array($date, $bookings)) { echo ""; } 
else { echo $date . " is Open\n";}} 

?> 
+2

隨着你發佈的代碼,你的日期是無效的,導致無限循環 –

+0

爲什麼有'$ query'? AFAICS它從來沒有使用過... – glglgl

回答

3
$startDate = '$date1'; 
$enddate = '$date2'; 

預期這不工作;單引號會阻止可變插值。另外,你不需要報價。

$startDate = $date1; 
$enddate = $date2; 

此外,我會建議改變你的循環條件。

while ($startDate < $enddate) { 

這樣做可能會阻止問題$startDate > $enddate在循環開始之前的時候。

最後,下面的語句不工作:

$dates[] = date; 

date是你最有可能還沒有定義的常量。你大概意思是:

$dates[] = $startDate; 
+0

薩姆,感謝幫助糾正這個錯誤。我做了這些改變。我對此沒有很好的處理,仍然試圖拼湊在一起。我試圖獲得日期1和日期2之間的開放日期以得出結果。我得到一個空白(回聲「是開放的」)任何幫助,將不勝感激。 –

0

除了傑克已經指出了存在的問題,在我看來,這將是一個很大隻使用一個循環,並避免建立該數組更高效的日期。

因此,像這樣:

$bookings = array("2013-06-16","2013-06-20"); 

$startDate = $date1; 
$enddate = $date2; 

while ($startDate <= $enddate) { 
    if (!in_array($startDate, $bookings)) { 
    echo $startDate . " is Open\n"; 
    } 
    $startDate = date('Y-m-d', strtotime($startDate . ' +1 day')); 
} 

或者你需要的$dates陣列用於其他目的?

+0

感謝詹姆斯的建議。這也適用。 –

相關問題