最近公司项目中有个需求,后端按照要求录入用户信息存入redis集合中,在某个时间点需要将这些数据都取出来,但是集合的key是以时间显示的,时间分钟的显示都是5的倍数。时间函数获取的分钟都是当前时间的分钟,所以需要获取与当前时间最近的数字。特此记录
function NextNumberArray($Number, $NumberRangeArray){
$w = 0;
$c = -1;
$abstand = 0;
$l = count($NumberRangeArray);
for($pos=0; $pos < $l; $pos++){
$n = $NumberRangeArray[$pos];
$abstand = ($n < $Number) ? $Number - $n : $n - $Number;
if ($c == -1){
$c = $abstand;
continue;
}
else if ($abstand < $c){
$c = $abstand;
$w = $pos;
}
}
//10-20更新
//因为我们项目是计算时间,时间只能向前查找,所以需要根据当前的数字再次判断,若接近时间大于当前时间,需要获取前一位的时间
if ($Number < $NumberRangeArray[$w]) {
return $NumberRangeArray[$w -1];
}
return $NumberRangeArray[$w];
}
print NextNumberArray(1, array(3, 8, 19, 34, 56, 89)) . "\n";