2014-10-05 50 views
-4

我有一个数组,它携带我的框架的所有路线。它看起来像这样使用键排序数组

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

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

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

]; 

我想基于阵列排序

  • 号斜杠(/)
  • 数量的动态参数

的键。我将如何实现它?

+1

你看着在PHP文件如何多维数组排序? – 2014-10-05 09:11:42

+0

你尝试过什么吗? – idmean 2014-10-05 09:15:08

+0

我试过uksort()和asort(),但没有工作 – 2014-10-05 09:16:22

回答

0

这里有两件事很重要。你需要保持价值关系的关键。这意味着你使用数组排序函数,如uasort()而不是usort()。接下来的事情是,你必须使用用户定义的排序功能,它表示你的排序算法。它描述了你想如何排列你的路线。

也可以按键排序:然后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);