Сортировка массива с помощью кнопок недели недели по будням

Я хочу сортировать массив с помощью кнопок недели недели в порядке недели, например: понедельник, вторник, среда, четверг, пятница, суббота.

Учитывая входные данные следующим образом:

Array ( [Thursday] => 8 [Friday] => 7 [Monday] => 9 [Tuesday] => 12 [Wednesday] => 8 [Saturday] => 17 ) 

Я хочу получить такой результат:

 Array ( [Monday] => 9 [Tuesday] => 12 [Wednesday] => 8 [thusday] => 8 [friday] => 7 [Saturday] => 17 ) 

Пожалуйста помоги.

Следующий код не использует никаких функций сортировки. Другими словами, в этом контексте сортировка не нужна.

 <?php //Your actual array... $arr=Array ( 'Thursday' => 8, 'Friday' => 7, 'Monday' => 9, 'Tuesday' => 12, 'Wednesday' => 8, 'Saturday' => 17 ); //This is the template array.. Changing this alters the output $arr2=array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); //A simple loop that traverses all elements of the template... foreach($arr2 as $v) { //If the value in the template exists as a key in the actual array.. (condition) if(array_key_exists($v,$arr)) { $arr4[$v]=$arr[$v]; //The value is assigned to the new array and the key of the actual array is assigned as a value to the new array } } //prints the new array print_r($arr4); 

OUTPUT :

 Array ( [Monday] => 9 [Tuesday] => 12 [Wednesday] => 8 [Thursday] => 8 [Friday] => 7 [Saturday] => 17 ) 

Используйте uksort . Вот один из способов:

 $week_order = array_flip(array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')); $data = array('Thursday' => 8, 'Friday' => 7, 'Monday' => 9, 'Tuesday' => 12, 'Wednesday' => 8, 'Saturday' => 17); uksort($data, function($a, $b) use ($week_order) { return $week_order[$a] - $week_order[$b]; }); print_r($data); 

Существует несколько способов сделать это, но это довольно просто с array_merge

 $d = array( 'Sunday' => '', 'Monday' => '', 'Tuesday' => '', 'Wednesday' => '', 'Thursday' => '', 'Friday' => '', 'Saturday' => '', ); $n = array ( 'Thursday' => 8, 'Friday' => 7, 'Monday' => 9, 'Tuesday' => 12, 'Wednesday' => 8, 'Saturday' => 17, ); var_dump(array_filter(array_merge($d,$n))); 

array_filter удаляет пустые значения, дающие вам следующее:

 array(6) { ["Monday"]=> int(9) ["Tuesday"]=> int(12) ["Wednesday"]=> int(8) ["Thursday"]=> int(8) ["Friday"]=> int(7) ["Saturday"]=> int(17) } 

Без этого у вас будет следующее:

 array(7) { ["Sunday"]=> string(0) "" ["Monday"]=> int(9) ["Tuesday"]=> int(12) ["Wednesday"]=> int(8) ["Thursday"]=> int(8) ["Friday"]=> int(7) ["Saturday"]=> int(17) } 

Обратите внимание на пустое значение для "Sunday"

Это также можно сделать с помощью простого цикла:

 $d = array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ); $n = array ( 'Thursday' => 8, 'Friday' => 7, 'Monday' => 9, 'Tuesday' => 12, 'Wednesday' => 8, 'Saturday' => 17, ); $sorted = array(); foreach ($d as $k) { if (isset($n[$k])) { $sorted[$k] = $n[$k]; } } var_dump($sorted);