2014-02-12 66 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; 
    } 
}