2011-05-16 74 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; 
    }