亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

急求?。。?!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 關注
  • 506 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號