PHP - 按属性组织对象数组

时间:2014-11-02 00:00:07

标签: php arrays oop sorting

以下是我的数组$geocodedList的结果:

array (size = 6) 
   0 => 
     object (Geocoder \ Result \ Geocoded) [24] 
       protected 'latitude' => float -22.4363597 
       protected 'longitude' => float -46.8106841 
       public 'distance' => float 1500 
   1 => 
     object (Geocoder \ Result \ Geocoded) [14] 
       protected 'latitude' => float -22.4349613 
       protected 'longitude' => float -46.8275498 
       public 'distance' => float 1740 
   2 => 
     object (Geocoder \ Result \ Geocoded) [25] 
       public 'distance' => float 152 

这是一个内部有多个对象(Geocoded)的数组。 我想通过这些对象的'distance'属性来组织这个数组。 我希望结果是:

0 => public 'distance' => 152 (item 2 of old array)
1 => public 'distance' => 1500 (item 0 of old array)
2 => public 'distance' => 1740 (item 1 of old array)

如何进行?我尝试了几件事但却无法得到任何东西。

1 个答案:

答案 0 :(得分:0)

您可以使用usort()指定自定义比较方法:

function cmp($a, $b) {
    if ($a->distance == $b->distance) {
        return 0;
    }
    return ($a->distance < $b->distance) ? -1 : 1;
}

usort($array, "cmp");

或等效的匿名函数:

usort($array, function ($a, $b) {
    if ($a->distance == $b->distance) {
        return 0;
    }
    return ($a->distance < $b->distance) ? -1 : 1;
});