以当前日期作为数组中的第一个元素对工作日数组进行排序


Sort array of weekdays with current day as 1st element in array

我想对一个工作日数组进行排序,当前日期是数组中的第一个元素。

当前日期:

$day=date("l");

$day给我星期四

输入:

Array
(
  [0] => Wednesday 9:30AM-6PM
  [1] => Thursday 9:30AM-9PM
  [2] => Friday 9:30AM-7PM
  [3] => Saturday 9AM-6PM
  [4] => Sunday 10AM-6PM
  [5] => Monday 9:30AM-6PM
  [6] => Tuesday 9:30AM-6PM
)
输出:

Array
(
  [0] => Thursday 9:30AM-9PM
  [1] => Friday 9:30AM-7PM
  [2] => Saturday 9AM-6PM
  [3] => Sunday 10AM-6PM
  [4] => Monday 9:30AM-6PM
  [5] => Tuesday 9:30AM-6PM
  [6] => Wednesday 9:30AM-6PM
)

你可以这样做:-

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
$day=date("l");
$data = Array
(
  '0' => 'Wednesday 9:30AM-6PM',
  '1' => 'Thursday 9:30AM-9PM',
  '2' => 'Friday 9:30AM-7PM',
  '3' => 'Saturday 9AM-6PM',
  '4' => 'Sunday 10AM-6PM',
  '5' => 'Monday 9:30AM-6PM',
  '6' => 'Tuesday 9:30AM-6PM'
);
$new_date_array = array();
$count = count($data);
foreach($data as $key=> $dat){
   if(strpos($dat, $day) !== false){ // get the key where input day matched
        for ($i =$key; $i<$count;$i++){ // add next all records to the new array till the end of the original array
            if(isset($data[$i])){
                $new_date_array[] = $data[$i];
            }
        }
        for ($j=0; $j<=$key-1;$j++){ // add previous one before the matched key to the new array
            if(isset($data[$j])){
                $new_date_array[] = $data[$j];
            }
        }
   }
}
echo "<pre/>";print_r($new_date_array);
输出

: -

Array
(
    [0] => Thursday 9:30AM-9PM
    [1] => Friday 9:30AM-7PM
    [2] => Saturday 9AM-6PM
    [3] => Sunday 10AM-6PM
    [4] => Monday 9:30AM-6PM
    [5] => Tuesday 9:30AM-6PM
    [6] => Wednesday 9:30AM-6PM
)

另一个输出(当我手动更改日期进行比较时):-https://eval.in/633102

你可以用你的时间做一个额外的数组。

$day=date("l");
$timeArray = array(
    "Monday" => "9:30AM-6PM",
    "Tuesday" => "9:30AM-6PM",
    "Wednesday" => "9:30AM-6PM",
    "Thursday" => "9:30AM-9PM",
    "Friday" => "9:30AM-7PM",
    "Saturday" => "9AM-6PM",
    "Sunday" => "10AM-6PM"
    );

那么你就可以把它映射到$day

$timestamp = strtotime($day);
$days = array();
for ($i = 0; $i < 7; $i++) {
    $dayname = strftime('%A', $timestamp);
    $days[] = $dayname." ".$timeArray[$dayname];
    $timestamp = strtotime('+1 day', $timestamp);
}
输出:

array(7) {
  [0]=>
  string(19) "Thursday 9:30AM-9PM"
  [1]=>
  string(17) "Friday 9:30AM-7PM"
  [2]=>
  string(16) "Saturday 9AM-6PM"
  [3]=>
  string(15) "Sunday 10AM-6PM"
  [4]=>
  string(17) "Monday 9:30AM-6PM"
  [5]=>
  string(18) "Tuesday 9:30AM-6PM"
  [6]=>
  string(20) "Wednesday 9:30AM-6PM"
}

这将把开始的项移到末尾。这就是你想要的吗?你的问题有点令人困惑。希望这对你有帮助:)

$array = ["m", "t", "w", "t", "f", "s", "s"];
$array[6] = array_shift($array);
print_r($array);

输出
Array ( [0] => t [1] => w [2] => t [3] => f [4] => s [5] => s [6] => m )

您可以使用$day=date("w"),它将在您的示例中星期四将$day设置为4。以某种方式创建基数组,周日索引为0,周一索引为1,…星期六6点。

现在,您可以通过从$day循环到$day + 6并从源数组中选择索引($day + $i) % 7,将这些项复制到输出数组中。

好了:参考旋转列表

$a = array('monday 123','tuesday 874','saturday 889', 'Thursday 123');
$b = array_filter($a, function($val){
if(strpos($val, date("l")) !== false) {
  return $val;
}
});
$i = key($b);
$arr2 = array_merge(array_slice($a, $i), array_slice($a, 0, $i));
print_r($arr2);

Array([0] =>星期四123[1]=>星期一123[2]=>星期二874[3]=>星期六889)

我在这里所做的是过滤您想要作为第一个元素的日期,并将其数字索引作为引用来重新生成输出。