2014-02-12 69 views
1

我有一個需要排序的多維數組。我希望這個數組首先根據從高到低的數量進行排序。但是,如果count具有相同的值,則按字母順序按城市排序。我不知道該怎麼做。對多維數組排序兩次

多維數組:

Array 
    (

    [0] => Array 
     (
      [id] => 2 
      [city] => c 
      [count] => 5 
     ) 

    [1] => Array 
     (
      [id] => 3 
      [city] => b 
      [count] => 10 
     ) 

    [2] => Array 
     (
      [id] => 4 
      [city] => a 
      [count] => 5 
     ) 
) 

任何想法?

編輯:

這是結果,我想:

Array 
    (

    [0] => Array 
     (
      [id] => 3 
      [city] => b 
      [count] => 10 
     ) 

    [1] => Array 
     (
      [id] => 4 
      [city] => a 
      [count] => 5 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [city] => c 
      [count] => 5 
     ) 
) 
+0

可能重複二維數組的值](http://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value) –

回答

1

這是怎麼了,我通常做..

$test = array(array('id'=> '2', 'city'=> 'c', 'count' => '5'),array('id'=> '3', 'city'=> 'b', 'count' => '10'),array('id'=> '4', 'city'=> 'a', 'count' => '5')); 

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

uasort($test , 'cmp'); 

結果

Array 
(
    [1] => Array 
     (
      [id] => 3 
      [city] => b 
      [count] => 10 
     ) 

    [2] => Array 
     (
      [id] => 4 
      [city] => a 
      [count] => 5 
     ) 

    [0] => Array 
     (
      [id] => 2 
      [city] => c 
      [count] => 5 
     ) 

) 
的[排序多
+0

工作正常。但我想先計數最高。怎麼做? – loghum

+0

更改'ksort($ newArr);'到'krsort($ newArr);'請選擇作爲答案,如果它可以幫助你感謝^ _^ – Maion

+0

它可以奏效。具有最多計數的數組現在是第一個,但第二個數組是數組,其中城市是c,這是錯誤的。 – loghum

1

使用usort與像一個用戶定義的函數:

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