php - 除非观看,否则会跳过 Usort

标签 php usort

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

最佳答案

Sorts histories by start date in ascending order

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

->orderBy('start')

关于php - 除非观看,否则会跳过 Usort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54897931/

相关文章:

php - Yii2:如何在输入字段前后添加符号

javascript - 单击 li 元素时无法执行功能

php - 降序排列

php - 在 PHP 中对多维数组进行排序

php - 在 PHP 中对 DateTime 对象数组进行 USort - 没有错误,数组未排序

php - 在另一个 Controller 中调用 Controller 功能

php - i18nFormat 与 CakePHP 3 - 为什么 YYYY 生成的年份与 yyyy 不同?

php - 使用sort函数进行排序和分组

php - 如果缺少中间文本,mysql 查询将不起作用