Здесь важны две вещи. Вам нужно сохранить ключ для отношения ценности. Это означает, что вы используете функции сортировки массивов, такие как uasort() вместо usort(). Следующее, что вы должны использовать пользовательскую функцию сортировки, которая выражает ваш сортирующий алгоритм. В нем описывается, как вы хотите сортировать маршруты.
Также можно сортировать по ключам: then array_flip() является вашим другом.
Вы можете использовать это для начала:
<?php
$routes=[
'/about' =>['ALL','static'],
'/[:name]/[:name]/[:name]' =>['ALL','dynamic','blog'],
'/news' =>['ALL','static','news'],
];
function sortShortestRoute($a, $b)
{
return (count($a) < count($b)) ? -1 : 1;
}
function sortStaticBeforeDynamic($a, $b)
{
if($a[1] === 'static' && $b[1] === 'static') {
return 1;
}
if($a[1] === 'dynamic' && $b[1] === 'dynamic') {
return -1;
}
if ($a[1] === $b[1]) {
return 0;
}
}
// first sort
uasort($routes, 'sortStaticBeforeDynamic');
var_dump($routes);
// second sort
uasort($routes, 'sortShortestRoute');
var_dump($routes);
Вы смотрели на PHP документацию о том, как сортировать многомерные массивы? –
Вы что-то пробовали? – idmean
Я пробовал uksort() и asort(), но не работал –