我有一个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