2013-08-22 71 views

回答

4

我的PHP是一個有點生疏,但你可以試試:

$matches=Array(); 

foreach($ranges as $i=>$ikey){ 
    if(strtotime($ranges[$i]['start']) < strtotime($at_time) && strtotime($ranges[$i]['end']) > strtotime($at_time)){ 
     array_push($matches,$i); 
    } 
} 

然後$matches將包含包含$at_time的所有範圍的數組。

1

這應該給你一個方法

$time = str_replace(":","",$at_time); 
foreach($ranges as $rangleval){ 
    $start = str_replace(":","",$rangleval['start']); 
    $end = str_replace(":","",$rangleval['end']); 
     if($start<=$time && $end>=$time){ 
      echo $at_time." lies between ".$rangleval['start']." and ".$rangleval['end']; 
      break; 
     } 
    } 
2

注:受上述@Jimmery答案的啓發。

你可以把它放到它返回匹配範圍功能 - 另外它有小的優勢,它與第一場比賽停止:

function timeInRange($at_time,$ranges) 
{ 
    foreach($ranges as $i=>$ikey) 
    { 
     if(strtotime($ranges[$i]['start']) < strtotime($at_time) && strtotime($ranges[$i]['end']) > strtotime($at_time)) 
     { 
      return $i; 
     } 
    } 
    return false; 
} 
3

這應該工作。

<?php 

function arrayContainsTime($time, $ranges) { 
    $target = strtotime($time); 
    foreach($ranges as $range) { 
     $start = strtotime($range['start']); 
     $end = strtotime($range['end']); 

     if($target > $start && $target < $end) { 
      return 1; 
     } 
    } 
    return 0; 
} 

$at_time  = '07:45:00'; 
$another_time = '10:30:45'; 

$ranges = [ 
    ['start' => '09:00:00', 'end' => '17:00:00'], 
    ['start' => '17:00:00', 'end' => '08:59:00'] 
]; 


echo $at_time, " match? ", arrayContainsTime($at_time, $ranges); 
echo "<br>"; 
echo $another_time, " match? ", arrayContainsTime($another_time, $ranges); 

See it in action here!

注意:它不會檢測17:00:00 - > 08:59:00正確的,因爲沒有日期包括在內。

+1

我將'$ target'初始化移出循環,因爲它在期間保持不變。 – NDM

相關問題