将当天的工作日数组排序为数组中的第一个元素

时间:2016-09-01 09:01:43

标签: php arrays sorting

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

当天:

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

5 个答案:

答案 0 :(得分:1)

你可以这样做: -

<?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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

这会将项目从开始移动到结尾。这就是你追求的吗?你的问题有点令人困惑。希望这会有所帮助:)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

在这里:参考$lookup

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

数组([0] =&gt;星期四123 [1] =&gt;星期一123 [2] =&gt;星期二874 [3] =&gt;星期六889)

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