为了账号安全,请及时绑定邮箱和手机立即绑定

急求!!!!PHP 获取下一个符合条件的整点数

急求!!!!PHP 获取下一个符合条件的整点数

慕工程0101907 2019-10-31 10:20:42
问题描述例如有一个数组,存储的是一些整点数据,无排序无规律,ex:$hours=[1,3,6,2,13,16,18,20];现在需要快速得出当前时间最接近的整点数,如果当前整点在数组内,则为当前整点,如果不在,则获取下一个最接近的整点数,依次类推。整点数应该大于等于当前整点,但是得判断跨天的情况,列如当前时间点是21点,那符合条件的应该是1。问题出现的环境背景及自己尝试过哪些方法因为是时间整点,所以是24进制,没法直接判断最临近的数,所以目前想到的办法是循环这个数组,依次拼接出各个时间戳(还得判断是否为跨天),然后当前时间戳做减法,取绝对值,然后按照这个差值进行排序,获取符合条件的数,总觉得效率不高,请问有更好的解法吗?
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

还是自己来吧!
$hours=[1,3,6,2,13,16,18,20];
$current_hour=date("G")+1;
$hours=array_unique($hours);
$count=count($hours);
$hours[]=$current_hour;
sort($hours);
$idx=array_search($current_hour,$hours);
if($idx==$count){
$result=$hours[0];
}
else{
$result=$hours[$idx+1];
}
echo$result;
                            
查看完整回答
反对 回复 2019-10-31
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

$hours=[1,3,6,2,13,16,18,20];
$current_hour=21;
$minDiff=null;
$return_hour=null;
foreach($hoursas$hour){
$diff=$hour-$current_hour;
if($diff<0){
$diff=$diff+24;
}else{}
if(($minDiff===null)OR($minDiff>$diff)){
$minDiff=$diff;
$return_hour=$hour;
}else{}
}
echo$return_hour;
                            
查看完整回答
反对 回复 2019-10-31
  • 2 回答
  • 0 关注
  • 494 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号