Попытка упорядочить массив за считанные минуты

Вопрос:

У меня есть массив данных, и я хочу отсортировать этот массив по разнице во времени между текущим временем и значением даты, которое я сохранил для каждого элемента в массиве.

Так, например, настало время 14:47:57, и мой массив может иметь следующие моменты:

23:00:00 00:30:00 19:00:00 20:30:00 00:00:00

При сортировке я хотел бы, чтобы массив находился в следующем порядке (с ближайшим к текущему времени первым – время всегда должно идти вперед)

19:00:00 20:30:00 23:00:00 00:00:00 00:30:00

Любые советы о том, что мне нужно посмотреть? Я просмотрел TIMESTAMPDIFF, когда получаю значения из базы данных, но результаты, которые я получаю, не совпадают. Я также могу получить разницу в минутах между текущим временем и временем массива элементов и отсортировать его на основе этого, но задавался вопросом, существует ли “более чистый” способ.

Я хорошо использую codeigniter, если кто-нибудь знает какие-либо помощники, которые могут это упростить.

Любая помощь приветствуется, приветствует.

Лучший ответ:

Я предлагаю вам использовать usort:

$time_now = new DateTime('...');
$times=[...];

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return 
       ($today->diff(new DateTime($a)) < $today->diff(new DateTime($b)))
           ? -1 : 1;
}

usort($times, "cmp");

Надеюсь, поможет.

Ответ №1

Если у вас есть массив строк, возможно, вы можете сначала отсортировать свой массив, а затем попытаться изменить его в соответствии с индексом… Что-то вроде этого?

<?
$times = array("23:00:00","00:30:00","19:00:00","20:30:00","00:00:00");
$times = sortByTime($times);

$nextTimes = getNextTimes($times,"14:47:57");
var_dump($nextTimes);

function sortByTime($array)
{
$ret = array();
foreach($array as $time)
{
$ret[strtotime($time)] = $time;
}
ksort($ret);
return $ret;
}

function getNextTimes($array,$hour)
{
$timestamp = strtotime($hour);
$index = 0;
foreach($array as $key=>$val)
{
if($timestamp < $key)
{
break;
}
$index++;
}
return array_merge(array_splice($array,$index),array_splice($array,0,$index));
}
?>

Оцените статью
TechArks.Ru
Добавить комментарий