Usort пропускается, если за ним не наблюдают - PullRequest
0 голосов
/ 27 февраля 2019

Это странная ситуация, у меня есть функция 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;
    }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Сортировка историй по дате начала в порядке возрастания

Похоже, все, что вам нужно, это добавить ORDER BY к вашему запросу

->orderBy('start')
...