Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 周一到周日的开放时间,从今天开始排序,而不是周一_Php_Arrays_Date - Fatal编程技术网

Php 周一到周日的开放时间,从今天开始排序,而不是周一

Php 周一到周日的开放时间,从今天开始排序,而不是周一,php,arrays,date,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 // fr

我似乎遇到了一个问题,即理解如何按照我想要的方式对数组进行排序

目前我的数组是这样的,每个索引表示从周一开始的一个工作日

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
)
我想展示一下今天的营业时间


谢谢。

您可以使用PHP日期函数获取一周中的当前日期0=周日,6=周六。您可以将当前阵列调整为从周日到周六运行,也可以在从阵列中获取元素时调整阵列元素

datew将返回一周中的某一天

有关PHP日期函数的完整说明,请参阅此文档


这很有趣,有点创造性地使用2 for循环就可以了

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';
}

以下逻辑可能与您试图实现的目标相符:

<?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));
注:具有旋转魔力的漂亮单衬套来自:


工作

如果你的数组总是从星期一到星期天,索引从0到6,那么只需提取你想要结束的数组,并将其添加到剩余数组的开头。星期六是5,所以要把它去掉,直到最后:

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

听起来好像他想展示开放时间,从今天开始,一直向前。如果在星期日到星期六创建该数组,则可以使用datew自动返回该数组,而无需任何输入。如果希望使函数能够返回不同的集合,则可以使用与datew函数相同的相关性将输入更改为数值。这样,用户就可以传入datew值或不同的开始日期。你放弃了吗?
$result = array_merge(array_splice($array, 5), $array);