首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从特定的开始日期对天数数组进行排序。

从特定的开始日期对天数数组进行排序。
EN

Stack Overflow用户
提问于 2018-10-02 11:27:47
回答 6查看 549关注 0票数 0

我把这些日子按随机顺序排列:

代码语言:javascript
复制
$jour_planning[] = "friday";
$jour_planning[] = "wednesday";
$jour_planning[] = "monday";
$jour_planning[] = "tuesday";
$jour_planning[] = "thursday";
$jour_planning[] = "sunday";
$jour_planning[] = "saturday";

如果我们今天是一个“星期二”,我希望有一个新的数组:

代码语言:javascript
复制
$jour_planning[] = "wednesday";
$jour_planning[] = "thursday";
$jour_planning[] = "friday";
$jour_planning[] = "saturday";
$jour_planning[] = "sunday";
$jour_planning[] = "monday";
$jour_planning[] = "tuesday";

用usort()怎么能做到这一点?

你好,维安尼

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-10-02 12:21:31

您可以使用uksort()date()strtotime()重新排列数组。

代码语言:javascript
复制
function sort_week_days( $t1, $t2 ) {
        $weekdays = array( 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' );
        foreach ( $weekdays as $key => $value ) {
            $weekdays[ $key ] = date( 'w', strtotime( $value ) );
        }

        $t1_time = date( 'w', strtotime( strtolower( $t1 ) ) );
        $t2_time = date( 'w', strtotime( strtolower( $t2 ) ) );

        return array_search( $t1_time, $weekdays ) - array_search( $t2_time, $weekdays );
    }

您需要按以下方式传递随机数组:

代码语言:javascript
复制
usort($jour_planning, "sort_week_days");

然后可以在下面的代码中使用数组:

代码语言:javascript
复制
$day = date('w'); // You need to change to date('w', '-1day'); get result from today.

for ($i=0; $i <= $day ; $i++) {
   array_push($jour_planning, array_shift($jour_planning));
}   
票数 0
EN

Stack Overflow用户

发布于 2018-10-02 12:04:21

我首先对数组进行排序(并避免使用法语和英语命名:)。

然后,将数组排序并存储为2的循环将数组分离为预期数组的前几天(包括这一天)和第二天。

最后,合并两个数组。

当然有更好的方法来做到这一点。

代码语言:javascript
复制
$jour_planning[] = "friday";
$jour_planning[] = "wednesday";
$jour_planning[] = "monday";
$jour_planning[] = "tuesday";
$jour_planning[] = "thursday";
$jour_planning[] = "sunday";
$jour_planning[] = "saturday";

$sorted_days_planning = array(1 => null, 2 => null, 3 => null, 4 => null, 5 => null, 6 => null, 7 => null);

foreach ($jour_planning as $value)
{
    $day_of_week = date('N', strtotime($value));
    $sorted_days_planning[$day_of_week] = $value;
}

$final_days_planning = array();

$day_to_start = "tuesday";
$day_found = false;
$temp_array = array();
foreach ($sorted_days_planning as $value)
{
    if (!$day_found)
    {
        $temp_array[] = $value;
        if ($day_to_start == $value)
            $day_found = true;
    }
    else
        $final_days_planning[] = $value;
}

$final_days_planning = array_merge($final_days_planning, $temp_array);

var_dump($final_days_planning);

产出:

代码语言:javascript
复制
array(6) {
    [0]=> string(9) "wednesday"
    [1]=> string(8) "thursday"
    [2]=> string(6) "friday"
    [3]=> string(8) "saturday"
    [4]=> string(6) "sunday"
    [5]=> string(6) "monday"
    [6]=> string(7) "tuesday"
}
票数 2
EN

Stack Overflow用户

发布于 2018-10-02 12:09:45

由于数组是随机排序的,因此没有其他方法可以正确排序,然后手工进行排序(不能按数字或字母顺序对数组进行排序--可以通过datetime()函数计算天数来完成,参见@Cid's答案),因此:

代码语言:javascript
复制
/*
$jour_planning = [];

$jour_planning[] = "friday";
$jour_planning[] = "wednesday";
$jour_planning[] = "monday";
$jour_planning[] = "tuesday";
$jour_planning[] = "thursday";
$jour_planning[] = "sunday";
$jour_planning[] = "saturday";
*/

$days = [
    0 => 'monday',
    1 => 'tuesday',
    2 => 'wednesday',
    3 => 'thursday',
    4 => 'friday',
    5 => 'saturday',
    6 => 'sunday'
];

$today = array_search(strtolower(date('l')), $days);
$tomorrow = ($today === 6) ? 0 : $today + 1;
$reordered = array_merge(array_slice($days, $tomorrow), array_slice($days, 0, $tomorrow));

print_r($reordered);

首先你必须搜索当前的一天,然后在这一天的索引中添加1,你就有了这一天,那就是明天。现在,当您拥有这个索引时,只需创建两个数组:第一个从明天开始,第二个从索引0开始到今天。然后将这两个数组合并在一起,您就得到了您想要的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52607444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档