Сортировка массива объектов по дате
В PHP мы часто сталкиваемся с необходимостью сортировки массива объектов по определенному свойству, например поле даты. Это позволяет нам отображать наши данные или манипулировать ими в хронологическом порядке.
Перестановка объектов по дате
Рассмотрим следующий массив объектов, где каждый объект представляет собой запись с Свойство даты:
$array = [
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
];
Чтобы отсортировать эти объекты по их свойству даты в порядке возрастания (сначала самые старые), мы можем использовать функции strtotime() и функцию usort().
Пользовательское сравнение Функция
Чтобы использовать usort(), нам нужно определить специальную функцию сравнения, которая сравнивает два объекта на основе их свойства даты. Следующий код определяет функцию, которая вычитает временную метку (преобразованную с помощью strtotime()) даты первого объекта из временной метки даты второго объекта:
function cb($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
}
Сортировка массива с помощью usort()
Как только у нас есть функция сравнения, мы можем вызвать usort() для массива, передав функцию сравнения в качестве второй аргумент:
usort($array, 'cb');
Пример
Используя приведенный ранее массив примера, полученный результат отсортированный массив будет:
[
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
]
PHP 5.3 и выше
Для PHP 5.3 и выше в качестве функции сравнения можно использовать более простую анонимную функцию:
usort($array, function($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
Этот подход обеспечивает тот же результат сортировки, что и предыдущий.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3