将另一个变量添加到数组以在foreach循环中使用它

时间:2013-03-26 11:53:41

标签: php arrays foreach smarty

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用FOR not 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;
}

答案 1 :(得分:1)

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

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