【问题标题】:Usort being skipped unless watchedUsort 被跳过,除非被观看
【发布时间】:2019-02-27 04:12:01
【问题描述】:

这是一个奇怪的情况,我有一个 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;
    }
}

【问题讨论】:

  • $hist1['start']-&gt;date &lt;=&gt; $hist2['start']-&gt;date; ???

标签: php usort


【解决方案1】:

按开始日期升序排列历史记录

听起来您只需要在查询中添加 ORDER BY

->orderBy('start')

【讨论】:

  • 哦,是的,当我可以更改查询时,我想我直接去了数组。仍然不确定数组排序的问题是什么,但如果没有必要,我想我只是希望我不会再遇到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2012-01-04
相关资源
最近更新 更多