это массив, который мне нравится сортировать в определенном порядке
$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);
Просто. Просто используйте 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);