在另一个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
。
因此,使用上面的数组示例,即0830-1730之间的星期一-星期五(12345),正确的站点将是NW1
。但是,仅在星期一的0930-0945之间,站点为AA4
。
我遇到的问题是周日和周一的1200-1300之间,站点应该为PL1
,但它与EM3
匹配,因此会添加更多的时间/规则,但这是基本思想。
目的是允许用户设置日期和时间,但是如果存在更直接的匹配项,则将其覆盖。
我曾想过在当前排序之后添加一个额外的排序,然后对以天为单位的值的数量进行排序..但这似乎破坏了原来的排序。
有什么办法吗?
谢谢
****更新****Link显示到目前为止我得到的。
在另一个问题的帮助下,我进行了一个数组的排序,该数组现在已排序,并允许我根据开始时间返回正确的值。简化的数组布局现在看起来像这样:$ arr = ...
使用本示例的[[array_multisort