$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