0

我的数据库类中有一个函数,它为我提供了某个用户正在参加的事件列表

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到当前数组索引的末尾。但这给了我一个无限循环。$numberDays var_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
4

2 回答 2

2

您可以使用 FOR 而不是 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;
}
于 2013-03-26T12:11:40.617 回答
1

您可以通过多种方式解决此问题:

计算循环剩余天数foreach,并立即打印出来;或添加一个单独的数组,剩余天数。您甚至可以为事件的每个方面创建一个包含(数组)字段的类。正如您已经观察到的那样,现在您正在覆盖值...

于 2013-03-26T12:13:13.150 回答