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

问题描述

  例如有一个数组,存储的是一些整点数据,无排序无规律,
  ex:   $hours = [1,3,6,2,13,16,18,20];
  现在需要快速得出当前时间最接近的整点数,如果当前整点在数组内,则为当前整点,
  如果不在,则获取下一个最接近的整点数,依次类推。整点数应该大于等于当前整点,
  但是得判断跨天的情况,列如当前时间点是 21点,那符合条件的应该是 1。

问题出现的环境背景及自己尝试过哪些方法

因为是时间整点,所以是24进制,没法直接判断最临近的数,
所以目前想到的办法是循环这个数组,依次拼接出各个时间戳(还得判断是否为跨天),
然后当前时间戳做减法,取绝对值,然后按照这个差值进行排序,获取符合条件的数,
总觉得效率不高,请问有更好的解法吗?
阅读 2.1k
3 个回答

还是自己来吧!

$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;
$hours = [1,3,6,2,13,16,18,20];
$current_hour = 21;

$minDiff = null;
$return_hour = null;
foreach ($hours as $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;
<?php

function find_next($hours,$find){
    // 唯一化
    $hours = array_unique($hours);
    // 重置索引为顺序数字
    $hours = array_values($hours);
    // 大海捞针
    $search = array_search($find,$hours);
    if($search===false){
        // 如果没有找到应该返回什么?
        return false;
    }
    // 找到位置向前移动一步 并取出一个
    $rs = array_slice($hours, $search + 1,1);
    if(empty($rs)){
        // 如果没有找到应该返回什么?
        return false;
    }
    // 取出第一个符合条件的
    return array_shift($rs);
    
}

$hours = [1,3,6,2,13,16,18,20];

$find = 3;

var_dump(find_next($hours,$find));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题