【发布时间】:2020-03-20 12:09:17
【问题描述】:
在另一个 question 的一些帮助下,我得到了一个现在已排序的数组,并允许我返回 基于开始时间的正确值。
简化的数组布局现在看起来像这样:
$arr = array (
array( 'Days' => '1',
'Start' => '0930',
'End' => '0945',
'Site' => 'AA4'),
array( 'Days' => '12345',
'Start' => '1200',
'End' => '1300',
'Site' => 'EM3'),
array( 'Days' => '12345',
'Start' => '0830',
'End' => '1730',
'Site' => 'NW1'),
array( 'Days' => '01',
'Start' => '1200',
'End' => '1300',
'Site' => 'PL1'),
array( 'Days' => '12345',
'Start' =>'1730',
'End' => '2130',
'Site' => 'RE1')
);
排序使用:
usort($arr, function($a, $b) {
return (date("N", strtotime($a['Days'])) <=> date("N", strtotime($b['Days']))) * 100 +
($b['Start'] <=> $a['Start']) * 10 +
($a['End'] <=> $b['End']);
});
以及使用返回的值:
foreach ($arr as $i => $values) {
if (strpos($values['Days'], $today) === false ) continue;
if ($time >= $values['Start'] && $time <= $values['End']) {
$site = $values['Site'];
break;
}
}
echo "$daysofWeek[$today] @ $time Site => $site";
除了按开始时间排序外,我还需要对Days 进行排序。 Sunday = 0, Saturday = 6.
因此,使用上述数组示例,周一至周五 (12345) 介于 0830-1730 之间,正确的站点将是 NW1。
但是,仅在星期一的 0930-0945 之间,该站点将是 AA4。
我遇到的问题是周日和周一 1200-1300 之间的站点应该是 PL1,但它匹配 EM3 会有更多的时间/规则添加到这里,但这是基本的想法。
目的是允许用户设置日期和时间,但如果有更直接的匹配,则覆盖它们。
我曾想过在当前排序之后添加一个额外的排序,并根据 Days 中值的数量进行排序。但这似乎打破了原来的排序。
有什么办法吗?
谢谢
**** 更新 **** Link 展示了我目前的成果。
【问题讨论】:
标签: php arrays sorting time days