在PHP中整理数组的特定时间

时间:2017-08-04 22:17:29

标签: php arrays

我需要从特定日期获取最新时间。在星期五的这个例子中。我有一个名为$arrayFriday的数组,它继承了时间戳。 现在我需要在同一天找出哪些时间戳是最新的。

数组$arrayFriday

Array
(
    [0] => 1483691580
    [1] => 1483696140
    [2] => 1483701240
    [3] => 1483720920
    [4] => 1489142460
    [5] => 1489144140
    [6] => 1489150260
    [7] => 1489750920
    [8] => 1489760160
    [9] => 1489765800
    [etc.]
)

在这个阵列中,有些时候我会努力。 例如06.01.2017 17:42是我回家的时间。

输出(来自此示例)应为:

Array
(
    [0] => 1483720920
    [1] => 1489150260
    [2] => 1489765800
)

或者,如果我从$ integerFriday(GMT + 1)回显它:

06.01.2017 17:42
10.03.2017 13:51
17.03.2017 16:50

所以输出也是一个数组,但只是整理了同一天的最新时间戳。

我的尝试:

foreach ($arrayFriday as $key => $value) {
    if(date('m.d.Y', $value) == date('m.d.Y', $arrayFriday[$key-1])){
        $integerFriday= $value;
    } else {
        echo date('l d.m.Y H:i', $integerFriday);
    } 
}

2 个答案:

答案 0 :(得分:3)

使用日期作为结果数组中的键。如果您的时间戳数组已排序,那么这就是您需要做的。当您迭代时间戳时,同一日期的后续值将覆盖该日期键的值,并且您将为每个日期留下最大的时间戳。

foreach ($timestamps as $ts) {
    $latest_times[date('Ymd', $ts)] = $ts;
}

您的数组必须事先排序才能生效。它看起来像你的,但如果不是,那么先sort($timestamps);

答案 1 :(得分:0)

这样的事情既简短又甜蜜:

rsort($arrayFriday);
$integerFriday = [$arrayFriday[0]];

foreach ($arrayFriday as $time) {
    if(date('m.d.Y', end($integerFriday)) > date('m.d.Y', $time)){
        $integerFriday[] = $time;
    }
}

当然,列表越大,所需的时间越长,因为您要对其进行排序。如果它总是排序,那么你可以用array_reverse()来反转它。

输出:

Friday 17.03.2017 15:50
Friday 10.03.2017 12:51
Friday 06.01.2017 16:42