向数组中添加另一个变量,以便在foreach循环中使用它


Add another variable to array to use it in foreach-loop

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

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

可以遍历一个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;
}

解决这个问题的方法有很多:

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