2011-05-16 76 views
1

我需要通過距離PHP數組排序/ multi_sort usort

Array 
(
    [0] => Array 
     (
      [name] => Pyro Pizza 
      [distance] => 2.3 
     ) 

    [1] => Array 
     (
      [name] => Sparky's Pizza 
      [distance] => 2.1 
     ) 

    [2] => Array 
     (
      [name] => American Dream Pizza - Portland 
      [distance] => 0.5 
     ) 

    [3] => Array 
     (
      [name] => Ken's Artisan Pizza 
      [distance] => 1.1 
     ) 

    [4] => Array 
     (
      [name] => Sparky's Pizza - SE 
      [distance] => 2.2 
     ) 

    [5] => Array 
     (
      [name] => Vincente's Gourmet Pizza and the V-Room 
      [distance] => 2 
     ) 

    [6] => Array 
     (
      [name] => Blind Onion Pizza and Pub 
      [distance] => 0.6 
     ) 

    [7] => Array 
     (
      [name] => Hot Lips Pizza 
      [distance] => 1.9 
     ) 

    [8] => Array 
     (
      [name] => Flying Pie Pizzeria 
      [distance] => 2 
     ) 

    [9] => Array 
     (
      [name] => Hammy's Pizza 
      [distance] => 2.4 
     ) 

) 

我用這個這個數組進行排序..

usort($results, 'sortByOrder'); 

與此..

function sortByOrder($a, $b) { 
    return $a['distance'] - $b['distance']; 
} 

但它不不工作

回答

3

這應該做的工作:

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

usort ($results, 'sortByOrder'); 

與您的代碼的問題是,比較功能,sortByOrder這裏,返回值應該是0,如果他們是平等的或-1/1如果其中一個更大。然而你的函數返回了距離的差異,這是usort()無法解析的。

3

您的sortByOrder函數不會看起來很正確。

usort

比較函數必須返回一個小於 整數,等於或 大於零,如果所述第一 參數被認爲是 分別小於,等於,或 大於第二。

+0

這是怎麼回事? – 2011-05-16 16:04:55

+2

@Kirk Strobec「給一個人一條魚,你今天喂他,教一個人去釣魚,你給他一輩子」 – zaf 2011-05-16 16:17:32

+0

概念和語法是兩個不同的世界 - 在你的比喻中,你所做的是「去釣魚」,而不是「用X網和Y船在Z小時用誘餌去北岸」 – 2011-05-16 16:20:24

2
function sortByOrder($a, $b) { 
     if ($a['distance'] == $b['distance']) return 0; 
     return ($a['distance'] < $b['distance']) ? -1 : 1; 
    }