php Поиск объекта с наиболее поздней датой изменения с помощью array_reduce()

Самый простой способ отсортировать массив сущностей по полю дата - использовать функцию usort()

Данная заметка предлагает не просто отсортировать массив объектов, но и сразу вернуть наиболее "свежую" дату, - в одно действие.

Функция php array_reduce() даёт возможность "собрать" массив к одному значению. И мы будем одновременно его сортировать и заменять результат в случае, если тот позже существующего.

$resultDate = array_reduce(
    $opinions,
    function (?DateTime $latestChangeDate, Opinion $opinion): DateTime {
        $opinionChangeDate = $opinion->getChangeDate();

        return $latestChangeDate < $opinionChangeDate ? $opinionChangeDate : $latestChangeDate;
    }
);

Итак,

  • $latestChangeDate - аргумент функции обратного вызова, в который после каждой итерации цикла кладётся возвращаемый результат. Обратите внимание, что изначально переменная $latestChangeDate не определена, т.е. равна null. Поэтому, тип аргумента указан как ?DateTime, что означает DateTime или null.
  • $opinions - массив объектов, из которых мы хотим выбрать последний изменённый, и чью дату изменения хотим получить.

Источник