Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-JSON使用不同的对象重新编码_Php_Web Services_Date - Fatal编程技术网

PHP-JSON使用不同的对象重新编码

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

我在一个使用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
但它总是打印最后一个日期,我循环打印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;