Как отсортировать ассоциативный массив php в определенном порядке?

это массив, который мне нравится сортировать в определенном порядке

$aData = Array ( [break] => Array ( [Indoor room] => 42 [Gym Class] => 19 ) [finish] => Array ( [Indoor room] => 42 [Gym Class] => 19 ) [lunch] => Array ( [Indoor room] => 7 ) [period1] => Array ( [Indoor room] => 12 [Gym Class] => 22 ) [period2] => Array ( [Gym Class] => 14 [Indoor room] => 25 ) [period3] => Array ( [Gym Class] => 21 [Indoor room] => 11 ) [period4] => Array ( [Gym Class] => 22 [Indoor room] => 20 ) [period5] => Array ( [Gym Class] => 16 [Indoor room] => 9 ) ) 

Но мне нравится в этом порядке:

 break, period1, period2, lunch, period3, period5, period6, finish 

для этого я пробую следующий код php

 $arraySort = [ "break", "period1", "period2", "period3", "lunch", "period4", "period5", "period6", "finish" ]; foreach($aData as $period => $catsScore){ echo 'test '.$period.'<br/>'; $periodItem = [$period]; foreach($arraySort as $cat){ echo 'new: '.$cat.'<br/>'; $periodItem[] = $catsScore; } $output[] = $periodItem; } print_r($output); 

Related of "Как отсортировать ассоциативный массив php в определенном порядке?"

Просто. Просто используйте arraySort в качестве ассоциированного ключа и получите соответствующий массив / значение из исходного массива,

 <?php $arraySort = [ "break", "period1", "period2", "period3", "lunch", "period4", "period5", "period6", "finish" ]; $final_array = []; foreach($arraySort as $arraySo){ $final_array[$arraySo] = $aData[$arraySo]; } print_r($final_array); 

Выход: – https://eval.in/926361

Создайте правильно упорядоченный массив и заполните его значением из исходного массива

 $final_array = array_replace(array_fill_keys($arraySort, []), $aData); 

демонстрация

В качестве альтернативы вы можете использовать фактическую функцию сортировки:

 uksort( $aData, function($a,$b)use($arraySort){ return array_search($a, $arraySort) - array_search($b, $arraySort); } ); 

вы можете использовать array_combine для этой цели:

 $arrary_sort = ["break", "period1"]; $final_array = array_combine($array_sort, $your_array_here);