За последние 24 часа нас посетили 19272 программиста и 1615 роботов. Сейчас ищут 968 программистов ...

Вопрос по сортировке

Тема в разделе "PHP для новичков", создана пользователем merOsever, 29 ноя 2017.

  1. merOsever

    merOsever Новичок

    С нами с:
    26 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Беларусь
    Можно ли реализовать сортировку по убыванию/возрастанию с помощью одного php?
    Нашел в интернете только варианты с JS.
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Смотря что сортировать собитаешся. PHP - это так же язык программирования как и js, если знаешь алгоритм - можно реализовать что угодно. Алгоритмов в интернете полно. Помню, сортировка была первой более мение нормальной задачкой по информатике в универе, при том что я не на инженера учусь.
    --- Добавлено ---
    Хотя в PHP по сути даже алгоритмы для этого не нужны. https://php.ru/manual/array.sorting.html
     
    artoodetoo нравится это.
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @merOsever, получи данные в массив и сортируй как душе угодно. Для этого уже есть готовые функции в php. Если их не хватит, можешь изобрести свою.
    --- Добавлено ---
    https://secure.php.net/manual/ru/ref.array.php
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    @merOsever, естественно, можно. Параметры сортировки можно сохранять в адресах или в куках.
     
  5. merOsever

    merOsever Новичок

    С нами с:
    26 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Беларусь
    Спасибо большое всем :)

    @miketomlin можно поподробнее про параметры сортировки в адресах и в куках?
    очень любопытно
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Ну, например, я делал простой File Viewer с сортировкой по имени файлов/каталогов и по размеру файлов в обоих направлениях, соответственно у каждого каталога могло быть 4 состояния, например:
    /files
    /files?p=1
    /files?p=2
    /files?p=3
    К ссылкам на все каталоги, включая вышележащие, присоединял тек. строку параметров, чтобы наследовалась сортировка. Делал это на уровне шаблона, как и ссылки для сортировки:
    HTML:
    1. <tr>
    2.   <th><a href="<?= $p,$pn?'':'?p=1' ?>">Name</a></th>
    3.   <th class="num"><a href="<?= $p,'?p=',$pn==2?3:2 ?>">Size</a></th>
    4. </tr>
    5.  
     
  7. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    А смысл напрягать сервер если проще на js отдать массив и в нем уже извращаться?!
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Объемы списков разные бывают. Для сортировки многостраничных списков все равно сервер приходится обычно привлекать.
     
  9. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Ну если многостраничник то это с бд тянется и пхп тут тоже не особо нужен. А на счет объёмов, то jsом быстрее получается, ведь проблема не в объёме а в том что браузер разом все отрисовывает. Js на скролл повесить и всё
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Само собой можно ))) Странно, что ты спрашиваешь вообще. Можно и на PHP и на SQL, к которому обращается PHP.

    В общем случае, если не весь список получен за один запрос, то сортировать надо на сервере. Хоть у тебя одностраничник, хоть многостраничник.

    Представьте, например, "бесконечный" список прокрутки (infinite scroll), данные для него получаются с сервера порциями. Страница не меняется, но чтобы выдать следующую порцию правильно, надо соблюдать сортировку уже на сервере. Полюбому!

    Если всё получается отдать за один запрос, то пофигу где сортировать.
     
    #10 artoodetoo, 30 ноя 2017
    Последнее редактирование: 30 ноя 2017
  11. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    по моему мнению, лучше сразу в sql сортировать и всё будет ОКЭЙ
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Согласен, боюсь только для топикстартера это одно и то же. Есть ЖС и не ЖС.
     
  13. merOsever

    merOsever Новичок

    С нами с:
    26 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Беларусь
    Я учусь и пробую решать именно практические задачи которые будут встречаться на самой работе.
    Например есть список товаров который надо отсортировать по убыванию цены учитывая то что он может постоянно добавляться.

    Как лучше сделать?
    Вот тут предложили засунуть все в один массив и сортировать с помощью встроенных в php функций например sort().
    И потом уже отсортированный товар положить в БД.

    PHP:
    1. $array = array(
    2.                 "Имя_товара1"=>"Цена_товара5",
    3.                 "Имя_товара2"=>"Цена_товара2",
    4.                 "Имя_товара3"=>"Цена_товара4",
    5.                 );
    6.  
    7. sort($array);
    Будет ли нормально обрабатываться массив с таким огромным количеством данных?Ведь товара может быть очень много.
    Как вообще лучше сделать ?
     
  14. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Ты хочешь сортировать товар для того, чтоб его запихнуть в базу данных или вывести пользователю на экран ?
    Если засунуть в базу,
    скорее всего ты его будешь обновлять или добавлять, но зачем сортировать ?
    суй как есть, а при запросе сортируй
     
    merOsever нравится это.
  15. merOsever

    merOsever Новичок

    С нами с:
    26 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Беларусь
    Вообще мне надо вывести пользователю.
    Но я подумал что стоит отсортировать все до того как заснуть в БД,потом засунуть в БД отсортированный товар,а оттуда можно уже доставать и выводить пользователю.
    Пожалуй ты прав и это слишком много лишних действий )

     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @merOsever, почитай что-нибудь про mysql. Сортировать всегда надо стараться в запросе, потому что тогда ты можешь использовать опять же встроенные в DB средства для пагинации, к примеру. У есть один проект, где ну как ни крути, в запросе не отсортируешь - слишком сложный алгоритм поиска, вот там приходится потом всякую костыльню на php расставлять, а так я всегда стараюсь отдать эту задачу базе, а не сортировать полученный результат из php
     
  17. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    поддерживаю, всегда сортирую sqlем,а потом работаю с результатом и всё шикарно, и потом сколько возможностей даёт sql для сортировки =)
     
  18. merOsever

    merOsever Новичок

    С нами с:
    26 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Беларусь
    Я минимально знаком с MySQL)
    Могу банально создать/изменить/удалить/вставить с помощью sql запросов.
    Попробую разобраться с запросом сортировки :)
    То есть логика построения кода будет такова:
    Принимаю товар,сортирую с помощью sql и ложу в БД,оттуда уже достаю отсортированный список и вывожу пользователю.
    Может подскажите по поводу архитектуры репозиториев?)
    Я так понимаю sql код надо держать в отдельном файле,и потом его подключить,чтобы не мешать все до кучи.
    Уместна ли будет такая реализация ?
     
  19. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @merOsever, не совсем такова...
    Принимаете товар и кладёте в БД. Без всякой сортировки... Из БД при выполнении запроса select... order by... получаете отсортированные данные...
     
    merOsever нравится это.
  20. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    ещё цена номенклатуры должна быть на отметку времени и берёте актуальную цену, чтоб потом верно запросить цену для вывода пользователю
     
    merOsever нравится это.
  21. merOsever

    merOsever Новичок

    С нами с:
    26 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Беларусь
    Спасибо всем большое за то что разжевали )
    Порой очень надо чтоб ответили может быть на глупые,но как мне кажется важные вопросы )
    --- Добавлено ---
    Как закончу покажу что получилось на ваше оценку )
     
  22. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    отгружай лайки)