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

时间:2015-05-26 17:09:57

标签: php arrays json date

我有一个JSON文件,其中包含不同时间点的特定值的值。目前,它很乱,并且包含很多的重复项。我想通过将重复项组织到日期范围来清理它。

JSON文件的结构如下:

public function store(ServiceRequest $request)
{          
    $service = Auth::user()->services()->create($request->all());
    $featuresIds = $request->input('features');

    $service->features()->attach($featuresIds);

    return redirect('admin/service');
}

我想要输出:

[
    {
        "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

我发布的代码大部分都有效,但在处理包含空值的大型数组时,它似乎有问题。因为副本仍在那里。

我该如何解决?我确信使用DateTime类可以更好地改进这种hacky方法;我希望有人能告诉我它是如何完成的。

1 个答案:

答案 0 :(得分:0)

我没有格式化输出。我想你可以自己

$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