2016-09-01 1 views
0

Я хочу сортировать массив будних дней с текущим днем, являющимся 1-м элементом массива.Сортировка массива будних дней с текущим днем ​​как 1-й элемент в массиве

Текущий день:

$day=date("l"); 

в $ день дает мне четверг

Вход:

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 
) 
+2

См. Http://stackoverflow.com/q/5055418/3933332 – Rizier123

ответ

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

+0

Спасибо @anant, приведенный выше код не добавляет предыдущий ключ и как я могу сортировать дни недели? – punnu

+0

Это сработало !!! . Спасибо большое @anant. – punnu

+0

@punnu welcome.Thanks для маркировки. :) :) –

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

Вы можете использовать $day=date("w"), который будет установлен $day 4 для четверг в вашем примере. Создайте базовый массив таким образом, что воскресенье имеет индекс 0, понедельник в 1, ... и субботу на 6.

Теперь вы можете скопировать элементы в ваш выходной массив с помощью цикла от $day до $day + 6 и выбора индекс ($day + $i) % 7 от вашего исходного массива.

0

Здесь вы идете: ссылка Rotating a list

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

То, что я сделал здесь, отфильтровывается в тот день, который вы хотите как первый элемент, и сделал свой числовой индекс как refrerence для регенерации вывода.

Смежные вопросы