Php 如何从数组创建日期范围?

Php 如何从数组创建日期范围?,php,arrays,json,date,Php,Arrays,Json,Date,我有一个JSON文件,其中包含不同时间点的特定值。目前,它是混乱的,包含了大量的重复。我想通过将副本组织成一个日期范围来清理它 JSON文件的结构如下所示: [ { "value": ".298", "time": "21 May 2015 1:18:06 AM" }, [...] { "value": ".298", "time": "21 May 2015 12:15:07 PM" },

我有一个JSON文件,其中包含不同时间点的特定值。目前,它是混乱的,包含了大量的重复。我想通过将副本组织成一个日期范围来清理它

JSON文件的结构如下所示:

[
    {
        "value": ".298",
        "time": "21 May 2015 1:18:06 AM"
    },
    [...]
    {
        "value": ".298",
        "time": "21 May 2015 12:15:07 PM"
    },
    {
        "value": ".046",
        "time": "21 May 2015 12:20:08 PM"
    },
    [...]
    {
        "value": ".046",
        "time": "21 May 2015 12:30:15 PM"
    },
    {
        "value": ".004",
        "time": "22 May 2015 8:55:06 PM"
    },
    [...]
    {
        "value": ".004",
        "time": "22 May 2015 9:45:06 PM"
    }    
]
我想要输出:

21/05 01:19:06 AM to 21/05 12:15:07 PM, value: .298
21/05 12:25:08 PM to 21/05 12:30:15 PM, value: .046
22/05 09:40:06 PM to 22/05 09:45:06 PM, value: .004
这是我目前掌握的代码:

foreach ($json as $sub) {
    if (isset($value)) {
        if ($value == $sub['value'] || $value == NULL) {
            $range[$i][] = [strtotime($sub['time']), $sub['value']];
        }
        else {
            $i++;
        }
    }
    $value = $sub['value'];
}

foreach ($range as $daterange) {
    $begin = $daterange[0][0];
    $end = $daterange[count($daterange)-1][0];
    printf('%s to %s, value: %s', 
        date('d/m h:i:s A', $begin), 
        date('d/m h:i:s A', $end), 
        $daterange[0][1]
    );
    echo "<br/>";
}
我发布的代码在大部分情况下都有效,但在处理包含空值的大型数组时,它似乎存在问题。正如在《圣经》中一样,副本仍然存在


我怎样才能修好它?我相信使用DateTime类可以大大改进这种黑客方法;我希望有人能告诉我是怎么做的。

我不格式化输出。我想你自己也可以

$array = json_decode($str);

$starttime = $endtime  = $array[0]->time; 
$value = $array[0]->value;

foreach ($array as $item) 
    if ($item->value == $value) $endtime = $item->time;
    else { 
        echo "$starttime to $endtime, value: $value\n";  
        $starttime = $endtime  = $item->time; 
        $value = $item->value;
    }
    echo "$starttime to $endtime, value: $value\n";  
有问题的数据输出:

21 May 2015 1:18:06 AM to 21 May 2015 12:15:07 PM, value: .298
21 May 2015 12:20:08 PM to 21 May 2015 12:30:15 PM, value: .046
22 May 2015 8:55:06 PM to 22 May 2015 9:45:06 PM, value: .004

你能举一个例子说明你提到的空值是如何显示的吗?我想要输出:21/05 01:19:06 AM到21/05 12:15:07 PM,值:.298这段时间你花在哪里?@splash58:不确定你的意思。在json for.298中,有两个时间是2015年5月21日上午1:18:06和2015年5月21日下午12:15:07。输出21/05 01:19:06 AM至21/05 12:15:07