我有一个数据数组,我想根据当前时间与我为数组中每个项目存储的日期戳值之间的时间差来对此数组进行排序。
例如,时间现在是14:47:57,我的数组可能会有以下时间:
23时○○分00秒 00:30:00 19:00:00 二十时30分00秒 00:00:00
排序时,我希望数组按以下顺序排列(最接近当前时间 - 但总是必须前进的时间)
十九点00分00秒 二十时30分00秒 23:00:00 00:00:00 00:30:00
关于我需要关注的任何建议?我从数据库中获取值时查看了TIMESTAMPDIFF但我得到的结果并不匹配。 我还可以检索当前时间和项目数组时间之间的分钟差异,并根据它进行排序,但是想知道是否有更清洁的'办法。
我使用codeigniter一个井,如果有人知道任何可以简化这个的帮助者。
任何帮助表示欢迎,欢呼。
答案 0 :(得分:1)
我建议您使用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 :(得分:0)
如果你有一个字符串数组,也许你可以先对数组进行排序,然后尝试根据索引重新排列它......这样的东西?
<?
$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));
}
?>