根据当前时间从数组am / pm获取下一次时间

时间:2019-07-11 15:59:33

标签: php

我的数组包含AM / PM格式的时间,并希望根据当前时间获得下一个时间。

Array ( [main2] => 4:17 am [main3] => 5:39 am [main4] => 12:26 pm [main5] => 3:42 pm [main6] => 7:13 pm [main7] => 8:43 pm )

当前时间是7:14 PM,根据上面的数组,它应该返回8:43 pm +“ main7”键。

2 个答案:

答案 0 :(得分:2)

答案与treyBake几乎相同,但不那么复杂(在我看来)。

使用array_search查找时间并从数组中返回key + 1。

$find = '7:14 pm';
$array = ['4:16 am', '5:38 am', '12:26 pm', '3:42 pm', '7:14 pm', '8:43 pm',];

$array[] = $find;
$array = array_unique($array); // if $find is duplicated then remove one of them

sort($array);
$result = $array[(array_search($find, $array)+1)];


var_dump($result); //8:43 pm

https://3v4l.org/uWtcF

答案 1 :(得分:1)

您可以执行以下操作:

<?php
    # get next key in arr
    function getNextKey($haystack, $needle)
    {
        $keys = array_keys($haystack);
        $pos = array_search($needle, $keys);

        if (isset($keys[$pos + 1])) {
            return $keys[$pos + 1];
        }

        return false;
    }

    $array = ['4:16 am', '5:38 am', '12:26 pm', '3:42 pm', '7:14 pm', '8:43 pm'];

    # your inputted time
    $time = '7.13 pm';
    # push into the array
    array_push($array, $time);

    # sort by time
    usort($array, function($a, $b) {return strtotime($a) - strtotime($b);});

    # get the key and use it to get the next val in the array
    $timeKey = array_search($time, $array);
    $nextTime = $array[getNextKey($array, $timeKey)];

    # display
    print_r($nextTime);

在这里,我们创建一个函数以返回数组中的下一个键,我们用它来获取数组中的下一个时间。一旦获得下一个值,您可以再进一步从数组中删除输入的时间-但这取决于您。