这是一个奇怪的情况,我有一个usort函数,仅当我通过xdebug监视代码执行时,它才能正常运行。不知道为什么。
除非被监视,否则几乎就像usort调用被跳过一样。只要有其他人经历过或有想法,只要寻找任何可能发生这种情况的信息即可。
这是代码,也许我错过了一些东西。
private function getProjectHistories() {
$query = $this->getEntityManager()->createQueryBuilder()
->select('p')
->from('App:ProjectHistory', 'p')
->where('p.profile = :user_id')
->setParameter('user_id', $this->getUserId())
->getQuery();
$histories_array = $query->getResult(Query::HYDRATE_ARRAY);
usort($histories_array, [$this, 'historyArraySort']);
return $histories_array;
}
/**
* Sorts histories by start date in ascending order
*
* @param array $hist1 history array
* @param array $hist2 history array
* @return int Sort value
*/
private function historyArraySort($hist1, $hist2) {
$histories_are_arrays = (is_array($hist1) && is_array($hist2));
$histories_have_starts = ($histories_are_arrays && array_key_exists('start', $hist1) && array_key_exists('start', $hist2));
$starts_have_dates = ($histories_have_starts && is_object($hist1['start']) && property_exists($hist1['start'], 'date') && is_object($hist2['start']) && property_exists($hist2['start'], 'date'));
if ($starts_have_dates) {
return $hist1['start']->date <=> $hist2['start']->date;
}
}
答案 0 :(得分:2)
按开始日期升序排列历史记录
您需要的声音就是在查询中添加ORDER BY
->orderBy('start')