2014-10-05 67 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);