周一至周日开放时间不同,请从今天而不是周一开始进行排序

时间:2020-06-27 21:59:13

标签: php arrays date

我似乎有一个问题,了解如何按照自己想要的方式对数组进行排序。

目前我的数组是这样,每个索引代表从星期一开始的一个工作日。

Array
(
    [0] => 08:00-18:00 // monday
    [1] => 08:00-18:00 // tuesday
    [2] => 08:00-18:00 // wednesday
    [3] => 08:00-18:00 // thursday
    [4] => 08:00-18:00 // friday
    [5] => 10:00-14:00 // saturday
    [6] => 10:00-14:00 // sunday
)

比方说今天是星期六,我需要数组看起来像这样

Array
(
    [0] => 10:00-14:00 // saturday
    [1] => 10:00-14:00 // sunday
    [2] => 08:00-18:00 // monday
    [3] => 08:00-18:00 // tuesday
    [4] => 08:00-18:00 // wednesday
    [5] => 08:00-18:00 // thursday
    [6] => 08:00-18:00 // friday
)

我要显示今天的开放时间。

谢谢。

4 个答案:

答案 0 :(得分:1)

以下逻辑可能与您要完成的工作很吻合:

<?php

$arr = ["08:00-18:00", "08:00-18:00", "08:00-18:00", "08:00-18:00", "08:00-18:00", "10:00-14:00", "10:00-14:00",
];
// rework $arr - give it days as keys
$dow = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
foreach ($arr as $key => $value) {
    $arr[$dow[$key]] = $value;
    unset($arr[$key]);
}

// rotate array
$day = 'saturday'; // start array with saturday
$shift = array_search($day, $dow);
$arr = array_merge(array_slice($arr, $shift, NULL, true), array_slice($arr, 0, $shift, true));

注意:旋转魔术的漂亮单线来自:https://www.php.net/manual/en/ref.array.php#105907

工作demo

答案 1 :(得分:0)

您可以使用PHP date()函数来获取星期几(0 =星期日,6 =星期六)。您可以将当前数组调整为从星期日到星期六运行,或者可以在从数组中获取元素时调整数组元素#。

date(“ w”)将返回星期几。

有关PHP date()函数的完整说明,请参阅此文档...

https://www.w3schools.com/php/func_date_date.asp

答案 2 :(得分:0)

这很有趣,只需创造性地使用2 for循环即可

FIRST(Fields!OccurCode.Value, "TTDC_Templates")

结果

function baseOnDay($day)
{
    $open = ['08:00-18:00', '08:00-18:00', '08:00-18:00', '08:00-18:00', 
             '08:00-18:00', '10:00-14:00', '10:00-14:00'
            ];
    $days = ['monday','tuesday','wednesday','thursday',
            'friday', 'saturday', 'sunday'
            ];
    $day = strtolower($day);
    if (!in_array($day, $days)) {
        return false;   // passed a silly param
    }
    
    $newOpen = [];
    $start = array_search($day, $days);
    for ($i=$start; $i<count($open); $i++){
        $newOpen[] = $open[$i];
    }
    for ($i=0; $i<$start; $i++){
        $newOpen[] = $open[$i];
    }
    return $newOpen;
}

if ( ($openTimes = baseOnDay('saturday')) !== false ){
    print_r($openTimes);
} else {
    echo 'Bad Parameter';
}

答案 3 :(得分:0)

如果您的数组始终是星期一至星期日,索引从0到6,则只需将您想要的数组提取到末尾,然后将其添加到剩下的开头即可。星期六是5点,所以将其删除:

$result = array_merge(array_splice($array, 5), $array);