PHP-JSON使用不同的对象重新编码
我在一个使用php的Web服务中发现了一个问题,我的数据库中有一个事件(一条记录),它持续了好几天PHP-JSON使用不同的对象重新编码,php,web-services,date,Php,Web Services,Date,我在一个使用php的Web服务中发现了一个问题,我的数据库中有一个事件(一条记录),它持续了好几天 2013-09-17 00:00:00 to 2013-09-20 23:59:59 四天来,我想用四个不同的日期打印四次 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
2013-09-17 00:00:00 to 2013-09-20 23:59:59
四天来,我想用四个不同的日期打印四次
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对象四次,效果很好,但总是在每个对象中打印最后一个日期
我的预期产出应该是
{
"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"
},,
{
},,
{
},,
{
},
这是我的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);
(foreach$events作为$event)
如果($event->event\u type=='MULTIPLE\u DAYS'){
$mul_start_date=substr($event->multi_days_start_date,8,2);
$mul_end_date=substr($event->multiple_days_end_date,8,2);
对于($mul_start_date;$mul_start_dateevent_date=substr_replace($event->multi_days_start_date,$mul_start_date,8,2);
$events[]=$event;
$mul_开始日期++;
}
}
echo json_编码($events);
如果需要帮助,请尝试此操作。将对象存储到数组变量中,然后打印数组
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);
这就是代码中的问题
$event->event\u date
包含您需要的日期,这就是您需要推送到结果数组中的日期。但到目前为止,整个JSON对象都在推送中
将其更改为:
$events[] = (array) $event;
更新 讨论结束后,您似乎试图将JSON对象重新编码为JSON格式。如果是这样,JiminP在注释中正确地解决了这个问题:
$event
是一个对象,它的引用存储在数组$events
中。因此,当对象添加到数组中并修改该对象时,数组中的所有(相同)其他对象似乎都被修改
因此,要解决此问题,只需将$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;
}
但这可能不是最好的解决方案。无论如何,更正后的代码现在应该如下所示:
$events[] = $event;
if($event->event\u type=='MULTIPLE\u DAYS')
{
$mul_start_date=substr($event->multi_days_start_date,8,2);
$mul_end_date=substr($event->multiple_days_end_date,8,2);
对于($mul_start_date;$mul_start_dateevent_date=substr_replace($event->multi_days_start_date,$mul_start_date,8,2);
$events[]=(数组)$event;
$mul_开始日期++;
}
$encoded=json_encode($events,json_PRETTY_PRINT);
echo$编码;
}
注意:JSON\u PRETTY\u PRINT
(从PHP 5.4.0开始提供)仅用于格式化输出。编码的JSON存储在一个变量中,然后进行回显
尝试键入将对象强制转换为数组 我希望这能有所帮助:改变
$events[] = (array) $event;
致:
$event
是一个对象,它的引用存储在数组$events
中。因此,当该对象添加到数组中并修改该对象时,数组中的所有(相同)其他对象似乎都被修改。但是,我不知道如何巧妙地解决此问题…:(@IrfanAhmed:Oh,你想用新的事件日期重新创建JSON吗?)
$events[] = $event;
$events[] = $event->event_date;
$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;
}
$events[] = $event;
$events[] = (array) $event;