2014-10-05 7 views
-4

У меня есть массив, который несет все маршруты моего фреймворка. Похоже, что этотСортировка массива с помощью ключей

$routes=[ 
    '/[:name]/[:name]/[:name]' =>['ALL','dynamic','blog'] 

    '/news'      =>['ALL','static','news'], 

    '/about'      =>['ALL','static'], 

]; 

Я хочу, чтобы отсортировать массив, основанный на

  • числа слеш (/)
  • ряда динамических параметров

в ключах. Как я могу это сделать?

+1

Вы смотрели на PHP документацию о том, как сортировать многомерные массивы? –

+0

Вы что-то пробовали? – idmean

+0

Я пробовал uksort() и asort(), но не работал –

ответ

0

Здесь важны две вещи. Вам нужно сохранить ключ для отношения ценности. Это означает, что вы используете функции сортировки массивов, такие как 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); 
Смежные вопросы