与当前时间进行比较时,搜索数组中的时间

时间:2017-10-22 00:26:22

标签: php arrays

我存储在数组中的时间列表。我想搜索时间,看看阵列中的时间是否接近我当前的时间。

示例:我当前的时间是01:16,所以在数组中有01.0001:3002:0005:00。如果我当前时间显示01:16或更高,则最接近的时间为01:00,因此我想获得整数值3。如果我当前时间显示01:30或大于数组01:30中的时间,则正确的时间为01:30,因此我希望获得值3。如果我当前时间显示02:00或大于数组02:00中的时间,则正确的时间为02:00,因此我希望获得值405.00等等。

相同

以下是代码:

function get_shows($day,$channel_id, DateTime $dt, $today = false) 
{

   $ch = curl_init();
   curl_setopt_array($ch, array(
      CURLOPT_USERAGENT => '',
      CURLOPT_TIMEOUT => 30,
      CURLOPT_CONNECTTIMEOUT => 30,
      CURLOPT_HEADER => false,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_MAXREDIRS => 5,
      CURLOPT_SSL_VERIFYPEER => false
   ));

   $date = $dt->format('Y-m-d');
   $tz = $dt->getTimezone();

   $now = new DateTime('now', $tz);
   $today = $now->format('Y-m-d');
   $shows = array();
   $url = 'https://www.example.com?date=' . $date;
   curl_setopt($ch, CURLOPT_URL, $url);
   $body = curl_exec($ch); //get the page contents
   $channel_row = $row_channels[0][0]; // Woksepp: 0 = First row.
   $pattern23 = "/<a class=\"prog\" href=\"(.*?)\">.*?<span class=\"time\">(.*?)<\/span>.*?<span class=\"title\" href=\"\#\">(.*?)<\/span>.*?<span class=\"desc\">(.*?)<\/span>/s";
    preg_match_all($pattern23, $channel_row, $d);
   $show_times = $d[2];

   if($day==0)
   {
      //check if my current time is close to the time in the arrays then set the $flag value
     //$flag = $i
   }
}
?>

以下是结果

Array ( [0] => 23:10 [1] => 00:40 [2] => 01:00 [3] => 01:30 [4] => 02:00 [5] => 05:00 
[6] => 06:00 [7] => 08:00 [8] => 08:30 [9] => 09:00 [10] => 10:00 
[11] => 10:30 [12] => 11:00 [13] => 11:25 [14] => 13:30 [15] => 13:55 
[16] => 16:00 [17] => 16:25 [18] => 16:55 [19] => 19:00 [20] => 19:55 
[21] => 22:15 [22] => 22:30 [23] => 23:30 [24] => 01:30 )

我期望做的是检查数组中的时间是否接近当前时间,因此我想获取整数值以将$flag设置为具有这样的值{{1 }}

你能告诉我一个例子,我可以比较数组中的时间和我当前的时间,因为我想得到整数值吗?

1 个答案:

答案 0 :(得分:0)

PHP有一个漂亮的函数strtotime(),可以让你将一个字符串翻译成一个unix时间戳,这样可以更容易地进行两次比较。

然后你将只需迭代你的数组,找到差异最小的时间(当前时间的绝对值减去数组中的时间)并将该特定时间的数组键保存在变量中。

$currentTime  = time();
$minTimeValue = PHP_INT_MAX;
$minTimeKey   = -1;

foreach ($array as $key => $time) {
    $thisTimeDifference = abs($currentTime - strtotime($time));
    if ($thisTimeDifference < $minTimeValue) {
        $minTimeKey = $key;
        $minTimeValue = $thisTimeDifference;
    }
}