在多个值上排序数组-基于日期和时间

问题描述 投票:0回答:1

在另一个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 = 0Saturday = 6

因此,使用上面的数组示例,即0830-1730之间的星期一-星期五(12345),正确的站点将是NW1。但是,仅在星期一的0930-0945之间,站点为AA4

我遇到的问题是周日和周一的1200-1300之间,站点应该为PL1,但它与EM3匹配,因此会添加更多的时间/规则,但这是基本思想。

目的是允许用户设置日期和时间,但是如果存在更直接的匹配项,则将其覆盖。

我曾想过在当前排序之后添加一个额外的排序,然后对以天为单位的值的数量进行排序..但这似乎破坏了原来的排序。

有什么办法吗?

谢谢

****更新****Link显示到目前为止我得到的。

在另一个问题的帮助下,我进行了一个数组的排序,该数组现在已排序,并允许我根据开始时间返回正确的值。简化的数组布局现在看起来像这样:$ arr = ...

php arrays sorting time days
1个回答
0
投票

使用本示例的[[array_multisort

© www.soinside.com 2019 - 2024. All rights reserved.