2015-09-22 45 views
1

如果我有一个按日期排序的对象列表,然后使用usort()按另一个属性对它们进行排序,它们是否会在适当时按日期排序?如果不是我怎么能确定这一点?是否保留现有订单

usort($result, function($a, $b) { 
    if($a['distance'] < $b['distance']) { 
     return -1; 
    } elseif($a['distance'] > $b['distance']) { 
     return 1; 
    } else { 
     return 0; 
    } 
}); 

$result是按日期排序,但表示该日期的财产不再连接。 $a['distance']是一个浮点数。

最终实现:

usort($result, function($a, $b) { 
    if($a['distance'] < $b['distance']) { 
     return -1; 
    } elseif($a['distance'] > $b['distance']) { 
     return 1; 
    } else { 
     if($a['date'] < $b['date']) { 
      return -1; 
     } elseif($a['date'] > $b['date']) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 
}); 

$a['date']是一个DateTime对象

+0

我们展示例如与代码 –

+0

@NullPoiиteя添加的代码,虽然我不知道,这将有助于,因为它是一个非常简单的使用usort的。 – Seraphithan

+0

将您的阵列结构与预期输出一起发布 –

回答

1

不要认为保持以前的订单被定义(保证)。但是你应该在你的比较函数中处理它。所以,如果日期相同(或其他方式,不确定你想要什么),那么按日期比较两个项目,然后通过其他属性进行比较,以便按照2个标准排序您的阵列。

usort($result, function($a, $b) { 
    if($a['distance'] < $b['distance']) { 
     return -1; 
    } elseif($a['distance'] > $b['distance']) { 
     return 1; 
    } else { 
     // Here don't return 0 but do other comparation by other criteria. 
    } 
}); 
+0

谢谢,我已根据您对问题的回答添加了我的最终实施。 – Seraphithan

+0

是的,就是这样! – MilanG