首页 > 解决方案 > 从特定开始日期对天数进行排序

问题描述

我有这个随机顺序的天数:

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

如果我们今天是“星期二”,我想拥有这个新数组:

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

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

问候,维尼

标签: phparrayssortingdays

解决方案


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

然后,循环排序的数组并存储到 2 中,将预期的数组(包括这个)之前的几天和之后的几天分开。

最后,合并两个数组。

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

$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);

输出:

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"
}

推荐阅读