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

FOREACHループではなくFORを使用して配列をウォークスルーできます。

$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 に答える