2011-07-08 24 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) 

は降順、各中の[count]キーでメイン配列のキーをソートすることが可能ですか?次の順序になっています: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

あなただけのキー関連に –

+0

感謝を維持するために、 'uasort'を使用することができます。このような何かを試してみてください!これは私が探していたものです –

+0

@Jack Murdoch、@ 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');