0

PHP を使用する Web サービスで問題が見つかりました。データベースにイベント (1 つのレコード) があります。

2013-09-17 00:00:00 to 2013-09-20 23:59:59

4日間、4つの異なる日付で4回印刷したいのですが、

event_date =  2013-09-17 00:00:00
event_date =  2013-09-18 00:00:00
event_date =  2013-09-19 00:00:00
event_date =  2013-09-20 00:00:00

しかし、それは常に最後の日付を出力します.jsonオブジェクトを4回印刷するためにループしています.正常に動作しますが、常に各オブジェクトの最後の日付を出力します.

私の期待される出力は、

{

"id": "472",
"event_date": "2013-09-17 00:00:00",
"event_type": "MULTIPLE_DAYS",
"multiple_days_start_date": "2013-09-17 00:00:00",
"multiple_days_end_date": "2013-09-20 23:59:59"

}、{

"id": "472",
"event_date": "2013-09-18 00:00:00",
"event_type": "MULTIPLE_DAYS",
"multiple_days_start_date": "2013-09-17 00:00:00",
"multiple_days_end_date": "2013-09-20 23:59:59"

}、{

"id": "472",
"event_date": "2013-09-19 00:00:00",
"event_type": "MULTIPLE_DAYS",
"multiple_days_start_date": "2013-09-17 00:00:00",
"multiple_days_end_date": "2013-09-20 23:59:59"

}、{

"id": "472",
"event_date": "2013-09-20 00:00:00",
"event_type": "MULTIPLE_DAYS",
"multiple_days_start_date": "2013-09-17 00:00:00",
"multiple_days_end_date": "2013-09-20 23:59:59"

}、

これが私のjsonオブジェクトの出力です。

{

"id": "1",
"event_date": "2013-09-19 00:00:00",
"event_type": "MULTIPLE_DAYS",
"multiple_days_start_date": "2013-09-17 00:00:00",
"multiple_days_end_date": "2013-09-20 23:59:59"

}

ここに私のコードがあります、

(foreach $events as $event)
if($event->event_type == 'MULTIPLE_DAYS') {
    $mul_start_date = substr($event->multiple_days_start_date, 8,2);
    $mul_end_date = substr($event->multiple_days_end_date, 8,2);
   for($mul_start_date; $mul_start_date<=$mul_end_date;) {
    $event->event_date = substr_replace($event->multiple_days_start_date, $mul_start_date, 8,2);
    $events[] = $event;
    $mul_start_date++;
   }
}
echo json_encode($events);

助けてください、

4

3 に答える 3

1

キャスト オブジェクトを配列に入力してみてください。

これが役に立てば幸いです:変更

$events[] = $event; 

に:

$events[] = (array) $event;
于 2013-09-18T06:40:52.593 に答える
1
$events[] = $event;

それがあなたのコードの問題です。

$event->event_date必要な日付が含まれており、それが結果配列にプッシュする必要があるものです。しかし現時点では、JSON オブジェクト全体がプッシュされています。

次のように変更します。

$events[] = $event->event_date;

デモ!


アップデート

議論の後、JSON オブジェクトを JSON 形式に再エンコードしようとしているようです。その場合、JiminP はコメントで問題に正しく対処しました。

$eventはオブジェクトであり、その参照は配列に格納され$eventsます。したがって、オブジェクトが配列に追加され、オブジェクトが変更されると、配列内のすべての (同じ) 他のオブジェクトが変更されたように見えます。

したがって、問題を解決するには、$eventオブジェクトを配列に型キャストする必要があります。

$events[] = (array) $event;

ただし、これは最善の解決策ではないかもしれません。とにかく、修正されたコードは次のようになります。

if($event->event_type == 'MULTIPLE_DAYS') 
{
    $mul_start_date = substr($event->multiple_days_start_date, 8,2);

    $mul_end_date = substr($event->multiple_days_end_date, 8,2);

    for($mul_start_date; $mul_start_date<=$mul_end_date;) 
    {
        $event->event_date = substr_replace($event->multiple_days_start_date, $mul_start_date, 8,2);
        $events[] = (array) $event;
        $mul_start_date++;

    }
    $encoded = json_encode($events, JSON_PRETTY_PRINT);
    echo $encoded;
}

注: JSON_PRETTY_PRINT(PHP 5.4.0 以降で使用可能) は、出力の書式設定にのみ使用されます。エンコードされた JSON は変数に格納され、エコーされます。

デモ!

于 2013-09-18T06:34:05.387 に答える
0

これを試して。オブジェクトを配列変数に格納します。次に、配列を印刷します

    for($mul_start_date; $mul_start_date<=$mul_end_date;) {
        $event->event_date = substr_replace($event->multiple_days_start_date, $mul_start_date, 8,2);
        $everntdate[] = $event->event_date;        
        $mul_start_date++;
       }
echo "<pre>";
print_r($everntdate);

この形式のような出力

Array
(
    [0] => 2013-09-17 00:00:00
    [1] => 2013-09-18 00:00:00
    [2] => 2013-09-19 00:00:00
    [3] => 2013-09-20 00:00:00
)
于 2013-09-18T06:32:54.413 に答える