嘿stackoverflow社区,
我目前正在尝试从一系列时间段中归档连续的时间轴。我的输入数组如下所示:
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.3282.0
我正在寻找的结果是:
$array = array(
0 => array(
'from' => '2019-01-01 00:00:00',
'to' => '2019-03-31 00:00:00'
),
1 => array(
'from' => '2019-02-04 00:00:00',
'to' => '2019-03-15 00:00:00'
));
尽我所能,我找不到合适的解决方案。 有谁知道如何用PHP解决这个问题?
答案 0 :(得分:3)
只需将所有时间转换为Unix时间戳,将它们放入一个简单的数组中,进行排序,然后通过构造所需的数组将它们转换回日期时间:
<?php
$array = array(
0 => array(
'from' => '2019-01-01 00:00:00',
'to' => '2019-03-31 00:00:00'
),
1 => array(
'from' => '2019-02-04 00:00:00',
'to' => '2019-03-15 00:00:00'
));
$unixTS = array();
foreach ($array as $arr => $times) {
foreach ($times as $str => $time) {
$unixTS[] = strtotime($time);
}
}
sort($unixTS);
$newArray = array();
for ($i = 0; $i < count($unixTS); $i++) {
if ($i < count($unixTS) - 1) {
if ($i + 2 >= count($unixTS))
$newArray[] = array('from' => date("Y-m-d H:i:s", $unixTS[$i]), 'to' => date("Y-m-d H:i:s", $unixTS[$i + 1]));
else
$newArray[] = array('from' => date("Y-m-d H:i:s", $unixTS[$i]), 'to' => date("Y-m-d H:i:s", $unixTS[$i + 1] - 1));
}
}
print_r($newArray);
输出:
Array
(
[0] => Array
(
[from] => 2019-01-01 00:00:00
[to] => 2019-02-03 23:59:59
)
[1] => Array
(
[from] => 2019-02-04 00:00:00
[to] => 2019-03-14 23:59:59
)
[2] => Array
(
[from] => 2019-03-15 00:00:00
[to] => 2019-03-31 00:00:00
)
)
使用$i
索引可能不是最优雅的方法,但是您可以理解这个概念并在需要时改进代码。
答案 1 :(得分:1)
我认为天真的解决方案应该可行。