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

Тема в разделе "Как сделать...", создана пользователем killoff, 28 апр 2014.

  1. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    В общем есть массив, в котором даты проставлены в виде:
    1 мая 2013, 5 апреля 2014, 1 мая 2014 и т.д.
    Можно как-то сделать сортировку по дате, чтобы все даты шли от большего к меньшему (и наоборот) с учетом месяцев и годов, а не только первой цифры даты??
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.401
    Симпатии:
    1.182
    1) preg_replace по массивам русских названий месяца в английские.
    2) strtotime - http://www.php.net/manual/ru/function.strtotime.php
    3) любая функция/алгоритм/метод для сортировки массива - http://ua1.php.net/manual/ru/array.sorting.php

    UPD: для связи изначального массива с конечным, можно скопировать массив, все значения изначального массива продублировать в ключи. Проделать вышеописанные операции над значениями нового массива и использовать его как признак для сортировки изначального.
     
    Последнее редактирование: 28 апр 2014
    killoff нравится это.
  3. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Посмотрел инфу, но в програминге я нуб, могу поправить что-то как-то... Нет ли готовых примеров для подобной реализации сортировки? :ah: ну или примерный код...
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.401
    Симпатии:
    1.182
    Код - это скучно :)
    Вот тебе второй алгоритм:
    1) Через preg_replace заменить месяцы на их цифровое значение. Через preg_replace заменить пробелы на точки (если пробелов больше двух подряд, то точка всё равно одна).
    2) Перевернуть полученное, так чтобы год был первым, например: "2014.04.21" Можно через explode -> array_reverse -> implode
    3) отсортировать.

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

    PS: задачка для любопытных - сравните оба алгоритма на скорость и найдите значение, для которых второй алгоритм вернёт неверные данные.
     
  5. UDAV

    UDAV

    Регистр.:
    22 июн 2007
    Сообщения:
    781
    Симпатии:
    153
    В базе в каком формате записи хранятся?
    strtotime самое простое.
     
  6. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Последнее редактирование: 3 май 2014
  7. ivan.petrov

    ivan.petrov Постоялец

    Регистр.:
    12 апр 2013
    Сообщения:
    94
    Симпатии:
    41
    Почему даты взятые из БД оказываются на русском? Что то не верю что в БД дата хранится текстом. Если там время в нормальном виде, то задача сильно упростится.

    Перед foreach сделайте:
    Код:
    echo('<pre>');
    var_dump($xfields);
    die();
    Результат куда нибудь вроде paste.org.ru выложите, дабы можно было представлять структуру данных.
     
  8. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    http://paste.org.ru/?mltwzc
     
  9. ivan.petrov

    ivan.petrov Постоялец

    Регистр.:
    12 апр 2013
    Сообщения:
    94
    Симпатии:
    41
    Весьма оригинально хранятся данные.

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

    1) preg_replace - в качестве паттерна и шалона скармливаете массивы месяцев на русском и английском.
    2) strtotime - конвертируете полученное в unix time
    3) Собираете новый массив где в место ключей время в unix time
    4) ksort() Сортируете массив полученный.
     
  10. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Вот код https://www.nulled.cc/threads/245159/page-2#post-2181679
    который выводит эти данные с массива, мне его как нужно поправить? я пхп могу конечно подправить, но что то написать - :kuku: