Сортировка данных массива по дате

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.619
Реакции
1.125
  • Автор темы
  • Модер.
  • #1
В общем есть массив, в котором даты проставлены в виде:
1 мая 2013, 5 апреля 2014, 1 мая 2014 и т.д.
Можно как-то сделать сортировку по дате, чтобы все даты шли от большего к меньшему (и наоборот) с учетом месяцев и годов, а не только первой цифры даты??
 
1) preg_replace по массивам русских названий месяца в английские.
2) strtotime - Для просмотра ссылки Войди или Зарегистрируйся
3) любая функция/алгоритм/метод для сортировки массива - Для просмотра ссылки Войди или Зарегистрируйся

UPD: для связи изначального массива с конечным, можно скопировать массив, все значения изначального массива продублировать в ключи. Проделать вышеописанные операции над значениями нового массива и использовать его как признак для сортировки изначального.
 
Последнее редактирование:
  • Автор темы
  • Модер.
  • #3
1) preg_replace по массивам русских названий месяца в английские.
2) strtotime - Для просмотра ссылки Войди или Зарегистрируйся
3) любая функция/алгоритм/метод для сортировки массива - Для просмотра ссылки Войди или Зарегистрируйся

UPD: для связи изначального массива с конечным, можно скопировать массив, все значения изначального массива продублировать в ключи. Проделать вышеописанные операции над значениями нового массива и использовать его как признак для сортировки изначального.
Посмотрел инфу, но в програминге я нуб, могу поправить что-то как-то... Нет ли готовых примеров для подобной реализации сортировки? :ah: ну или примерный код...
 
Посмотрел инфу, но в програминге я нуб, могу поправить что-то как-то... Нет ли готовых примеров для подобной реализации сортировки? :ah: ну или примерный код...
Код - это скучно :)
Вот тебе второй алгоритм:
1) Через preg_replace заменить месяцы на их цифровое значение. Через preg_replace заменить пробелы на точки (если пробелов больше двух подряд, то точка всё равно одна).
2) Перевернуть полученное, так чтобы год был первым, например: "2014.04.21" Можно через explode -> array_reverse -> implode
3) отсортировать.

Для кода, кстати, данных не хватает...
Приведи пример реального массива, с которым работаешь, и сформируй ручками из него то, что хочешь получить на выходе.

PS: задачка для любопытных - сравните оба алгоритма на скорость и найдите значение, для которых второй алгоритм вернёт неверные данные.
 
В базе в каком формате записи хранятся?
strtotime самое простое.
 
  • Автор темы
  • Модер.
  • #6
вот код Для просмотра ссылки Войди или Зарегистрируйся
с него мне надо получить года и месяц, по возможности и дни.... :)
 
Последнее редактирование:
вот код Для просмотра ссылки Войди или Зарегистрируйся
с него мне надо получить года и месяц, по возможности и дни.... :)

Почему даты взятые из БД оказываются на русском? Что то не верю что в БД дата хранится текстом. Если там время в нормальном виде, то задача сильно упростится.

Перед foreach сделайте:
Код:
echo('<pre>');
var_dump($xfields);
die();

Результат куда нибудь вроде paste.org.ru выложите, дабы можно было представлять структуру данных.
 
  • Автор темы
  • Модер.
  • #8

Весьма оригинально хранятся данные.

Разбиваете эти строки по разделителям, вытаскиваете свою дату. Дальше алгоритм такой.

1) preg_replace - в качестве паттерна и шалона скармливаете массивы месяцев на русском и английском.
2) strtotime - конвертируете полученное в unix time
3) Собираете новый массив где в место ключей время в unix time
4) Для просмотра ссылки Войди или Зарегистрируйся Сортируете массив полученный.
 
  • Автор темы
  • Модер.
  • #10
Назад
Сверху