2011-07-08 108 views
2

我有一個數組,看起來像這樣:排序多維數組?

Array ([0] => Array ([filters] => Array ([filter_1] => 1 
              [filter_2] => 1 
              [filter_3] => 1 
              [filter_4] => 1 
              [filter_5] => 1 
              [filter_6] => 1), 
         [count] => 2), 

     [1] => Array ([filters] => Array ([filter_1] => 1 
              [filter_2] => 1 
              [filter_3] => 1 
              [filter_4] => 1 
              [filter_5] => 1 
              [filter_6] => 1), 
         [count] => 34) 

     [2] => Array ([filters] => Array ([filter_1] => 1 
              [filter_2] => 1 
              [filter_3] => 1 
              [filter_4] => 1 
              [filter_5] => 1 
              [filter_6] => 1), 
         [count] => 7) 

是否有可能通過在每個[計數]鍵,下降到主陣列按鍵排序?以便它們按以下順序排列:1 -2 -0

回答

3

您絕對需要usort函數。您可以定義排序功能如何確定哪個更大或更小。

如果每個子數組(「過濾器」和「計數」)都重新編制索引,這應該是完美的。通過重新索引,我的意思是新排序的數組將從0開始,進展到1等。這幾乎總是您想要的,除非您的原始數組是關聯的。

例如:

usort($array, "byCount"); 

function byCount($a, $b) 
{ 
    if($a['count'] == $b['count']) 
    { 
     return 0; 
    } 
    return ($a['count'] < $b['count']) ? -1 : 1; 
} 
+0

您可以使用'uasort'來維護密鑰關聯 –

+0

謝謝!這就是我在尋找 –

+0

@傑克默多克,假設@soren會想索引訪問數組,'uasort'會和他想要的完全相反。如果'$ array [0]'在'$ array [1]'之後進行排序,那麼結果數組就是'$ array(1,0)',這很少有用,除非像我在我的回答中提到的那樣,數組是關聯。 – rockerest

4

你需要使用uasort功能。試試這樣:

function cmp($a, $b) { 
    if ($a["count"] == $b["count"]) { 
     return 0; 
    } 
    return ($a["count"] > $b["count"]) ? -1 : 1; 
} 

uasort($array, 'cmp');