2013-03-26 63 views
0

我在我的數據庫類的功能,這使我的事件的列表中的某個用戶正在參加另一個變量添加到陣列使用它的foreach循環

function getEventList($uid) 
{ 
    $date = date('Y-m-d H:i:s'); 
    $eventSQL = "SELECT em.eventID, e.eventName, e.eventTime FROM eventmembers em INNER JOIN events e ON em.eventID = e.eventID WHERE userIDInvited = :uid"; 
    $eventPrepare = $this->prepare($eventSQL); 
    $eventPrepare->bindParam(':uid', $uid); 
    $eventPrepare->execute(); 
    return ($eventPrepare->rowCount() > 0) 
     ? $eventPrepare->fetchAll() : array(); 
} 

要訪問這些結果,我簡單地做這個

//php 

$eventList = $db->getEventList($userid); 
if($eventList == NULL){ 
$smarty->assign('events', 'No events'); 
} 
else{ 
$count = sizeof($eventList); 
for($i = 0; $i < $count; $i++) 
{ 
    $smarty->assign('events', $eventList); 
} 
} 

html 

<p>MY EVENTS</p> 
    {foreach from=$events item=result} 
     <a href="https://localhost/FinalYear/events/{$result.eventID}.php">{$result.eventName}</a><br> 
     {$result.eventTime}<br>({$result.timeRemain} Days remaining) 
     <br> 
     <br> 
{/foreach} 

我想現在要做的是增加,這裏面還有說多少天,直到剩餘此事件發生。

我所做的只是簡單地在for循環中添加它。現在

$startTimeStamp = strtotime($date); 
    $endTimeStapm = strtotime($eventList[$i]['eventTime']); 
    $timeDiff = abs($endTimeStapm - $startTimeStamp); 
    $numberDays = $timeDiff/86400; 
    $numberDays = intval($numberDays); 

的問題是,那麼當,用戶參加一個以上的情況下,$numberDays將被永遠改寫。所以我試圖將$numberDays添加到當前數組索引的末尾。但是這給了我一個無盡的循環。如果沒有$numberDaysvar_dump給我這個輸出,當我必須項

array(2) { [0]=> array(3) { ["eventID"]=> string(1) "1" ["eventName"]=> string(7) "Konzert" ["eventTime"]=> string(19) "2013-03-28 00:00:00" } [1]=> array(3) { ["eventID"]=> string(1) "2" ["eventName"]=> string(4) "Oper" ["eventTime"]=> string(19) "2013-03-30 00:00:00" } } array(2) { [0]=> array(3) { ["eventID"]=> string(1) "1" ["eventName"]=> string(7) "Konzert" ["eventTime"]=> string(19) "2013-03-28 00:00:00" } [1]=> array(3) { ["eventID"]=> string(1) "2" ["eventName"]=> string(4) "Oper" ["eventTime"]=> string(19) "2013-03-30 00:00:00" } } 

但我也想在剩餘天數的每個條目的結尾。問題是,我不能在另一個循環中執行它,因爲這意味着我需要在另一個循環內的.html文件中創建另一個循環。所以它會在另一個循環跳轉到下一個條目之前通過。

任何建議如何解決這個問題?

我的數據庫表看起來像這樣

events

eventID, eventName, eventDescription, eventLocaion, eventTime, eventHost, privacy Settings 

eventmembers

eventID, userIDInvited, InvitationStatus 
+0

您正在循環中分配'$ smarty-> assign('events',$ eventList);'每次它將覆蓋前一個值in事件將永遠是最後一個 – 2013-03-26 11:55:40

+0

Hi @PrasanthBendra - 如果我將它寫入for-loop或for for循環中,它沒有任何區別。只要我加上時間計算,它總是會導致無限循環。 – loomie 2013-03-26 12:06:02

回答

2

您可以通過陣列走不foreach循環。

$data = array(0 => array('name' => 'John', 'age' => '12'), 1 => array('name' => 'Megan', 'age' => '18')); 
for ($i = 0; $i < sizeof($data); $i++) { 
// get your needed timestamp, for example 
$time = time(); 
// add this to each sub-array end 
$data[$i]['time'] = $time; 
} 
+0

謝謝!似乎我搞砸了我的$ endTimeStapm = strtotime($ eventList [$ i] ['eventTime']); 我認爲這是不可能的,因爲這沒有奏效,謝謝! – loomie 2013-03-26 12:54:39

1

的許多方式,你可以解決這個問題:

計算剩餘的foreach環的天數,並立即打印出來;或者添加剩餘天數的獨立陣列。您甚至可以爲事件的每個方面創建一個包含(數組)字段的類。正如您已經觀察到的,現在您正在覆蓋該值...