如何通过比较时间范围来搜索多维数组?


$now   = '14:01';
$datas = [
[
'mk'    => 'abc',
'timeS' => '08:00',
'timeF' => '10:00',
],
[
'mk'    => 'def',
'timeS' => '12:00',
'timeF' => '14:00',
],
[
'mk'    => 'ghi',
'timeS' => '16:00',
'timeF' => '18:00',
]
];
for ($i = 0; $i < count($datas); $i++) {
if ($datas[$i]['timeS'] < $now and $now < $datas[$i]['timeF']) {
echo "{$datas[$i]['mk']}";
break;
} else {
echo "{$datas[$i + 1]['mk']}";
break;
}
}

因为$now = '14:01';,我想ghi得到mk值。

请帮我解决它。

最简单的解决方案:

$now   = '08:30'; $datas = [
[
'mk'    => 'abc',
'timeS' => '08:00',
'timeF' => '10:00',
],
[
'mk'    => 'def',
'timeS' => '12:00',
'timeF' => '14:00',
],
[
'mk'    => 'ghi',
'timeS' => '16:00',
'timeF' => '18:00',
], ];
$iNow = str_replace(':' , '' , $now);
foreach($datas as $date){
$iTimeS = str_replace(':' , '' , $date["timeS"]);
$iTimeF = str_replace(':' , '' , $date["timeF"]);
if($iTimeS < $iNow && $iNow < $iTimeF)
// --> show value array 'mk'
elseif($iTimeS > $iNow)
// --> show value array 'mk' in next key array
}

这是一个更简单的解决方案...

由于您的子数组是按其时间范围排序的,并且当$now大于给定timeF时,您将向上舍入到下一个子数组,因此timeS无关紧要。

由于您的值是具有可预测且一致格式的字符串,因此无需删除冒号即可进行准确比较。

此解决方案显示了在确定合格结果后立即break的最佳实践。

代码:(演示(

// $now = '08:30';
// $now = '11:00';
// $now = '14:00';
$now = '14:01';
$datas=[
['mk'=>'abc','timeS'=>'08:00','timeF'=>'10:00'],
['mk'=>'def','timeS'=>'12:00','timeF'=>'14:00'],
['mk'=>'ghi','timeS'=>'16:00','timeF'=>'18:00']
];
foreach($datas as $row){
if($row['timeF'] >= $now){
echo $row['mk'];
break;
}
}

输出:

ghi

相关内容

  • 没有找到相关文章

最新更新