2012-04-28 40 views
2

我想按評級對這個多維數組進行排序。PHP排序包含雙打的多維數組

Array 
(
    [0] => Array 
     (
      [id] => 4 
      [image] => test-image.gif 
      [name] => Mia Panton 
      [description] => From Falkirk 
Wearing: River Island 
      [month] => 04-2012 
      [rating] => 0.0000 
      [votes] => 0 
     ) 

    [1] => Array 
     (
      [id] => 3 
      [image] => test-image.gif 
      [name] => Sam Jane Raggett 
      [description] => From: Falkirk 
Fav Shop: Republic 
      [month] => 04-2012 
      [rating] => 1.0000 
      [votes] => 1 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [image] => test-image.gif 
      [name] => Sasha Westbrooke 
      [description] => From Falkirk 
Wearing: River Island 
      [month] => 04-2012 
      [rating] => 4.0000 
      [votes] => 2 
     ) 

    [3] => Array 
     (
      [id] => 1 
      [image] => test-image.gif 
      [name] => Max Rose-Collins 
      [description] => From: London 
Fav Shop: blah 
      [month] => 04-2012 
      [rating] => 3.3333 
      [votes] => 6 
     ) 

) 

我用這這樣做

function orderByRating($a, $b) { 
    return $a['rating'] - $b['rating']; 
} 
usort($array, 'orderByRating'); 

但你可以看到它似乎不爲0的工作是在頂部,然後1,則4 3.然後 我我不確定它是否與數字是雙打的事實有關?

任何幫助,將不勝感激。謝謝

回答

4

使用谷歌http://www.php.net/manual/en/function.uasort.php#100325(略修正)

function sorting($a, $b) 
{ 
    $d = $a['rating'] - $b['rating']; 
    return $d < 0 ? -1 : ($d > 0 ? 1 : 0); 
} 
+1

右鍵;問題是比較函數需要返回一個整數。只要評級總是一個整數,馬克斯的原始功能就會起作用。 – Charles 2012-04-28 17:27:46

+0

謝謝,當我試圖找出它時,我錯過了關於php手冊的評論。 – 2012-04-28 17:32:12

+0

我想你可以通過另一種方式做到這一點,做$ a ['rating'] * 10000 - $ b ['rating'] * 10000' – 2012-04-28 17:46:37

-1

你不應該回到A-B,因爲當A-B的東西小於0,將平等對待。

請看這段代碼。

<?php 
$array = array(1.0,2.9,3.5,4.3); 
function orderByRating($a, $b) { 
    return $a - $b; 
} 
function orderByRating2($a, $b) { 
    if($a>$b) 
     return 1; 
    if($a<$b) 
     return -0; 
    return 0; 
} 
usort($array, 'orderByRating'); // 1,3.5,2.9,4.3 
usort($array, 'orderByRating2'); //1,2.9,3.5,4.3 

print_r($array); 
0

的另一種方法:
張貼由Lohoris(http://stackoverflow.com/a/2699110/1363184)

function aasort (&$array, $key) { 
    $sorter=array(); 
    $ret=array(); 
    reset($array); 
    foreach ($array as $ii => $va) { 
     $sorter[$ii]=$va[$key]; 
    } 
    asort($sorter); 
    foreach ($sorter as $ii => $va) { 
     $ret[$ii]=$array[$ii]; 
    } 
    $array=$ret; 
} 

aasort($test,"rating");