Как сделать сортировку на сайте php

Добавил пользователь Алексей Ф.
Обновлено: 10.09.2024

Сортировка является одной из наиболее важных процедур при работе с массивами. Чтобы осознать ее важность достаточно вспомнить о таких действиях, как, например, сортировка фильмов в алфавитном порядке или сортировка каких-либо цен по возрастанию или убыванию и т.д. Согласитесь, очень распространенные действия для различных приложений! Сегодня мы поговорим, как производить сортировку элементов массива по заданным условиям.

Итак, сортировка упрощает работу с массивами. Когда элементы отсортированы, то их проще найти и произвести с ними необходимые действия, например, те, о которых я написала чуть выше. Все зависит от задачи, которая перед Вами стоит.

Задачи могут быть различными, но инструменты, которые мы при этом будем использовать останутся стандартными. Эти инструменты – специальные функции, которые и применяются для сортировки элементов массива.

Функций этих в php несколько, и какую из них применить, опять же будет зависеть от конкретной задачи, а также от того, является ли Ваш массив ассоциативным или массивом-списком.

Давайте на примерах разберем эти функции и посмотрим, как они работают.

Сортируем массивы-списки в алфавитном и обратном порядке

Для начала давайте познакомимся с достаточно простой и понятной функцией sort().

Она позволит нам отсортировать элементы массива по возрастанию или, если эти элементы строковые – в алфавитном порядке.

Применение ее достаточно простое. Чтобы протестировать эту функцию, нам достаточно объявить некий массив, далее при помощи функции отсортировать его элементы и вывести результат на экран, чтобы увидеть, что получится.


А результат будет следующим. Как Вы можете видеть на скриншоте справа, элементы отсортированы в алфавитном порядке. Если вместо строковых элементов у нас будут числа, то эта функция также отсортирует числа по возрастанию. Можете проверить это самостоятельно.

Также существует и функция, которая делает обратное действие, то есть сортирует элементы массива по убыванию или в порядке обратном алфавитному.

Эта функция называется rsort(). Работает она следующим образом:


Как Вы можете видеть, теперь результат полностью противоположный. Элементы массива отсортированы по убыванию, что в данном случае обозначает в порядке обратном алфавитному.

Думаю, что с этими функциями все предельно ясно. Протестируйте их со своими массивами и у Вас не останется никаких вопросов.

Сортировка ассоциативных массивов

Все замечательно, однако, с ассоциативными массивами мы уже не сможем применить данные функции, так как они разрывают связь значения с ключом массива. Поэтому нам нужно познакомиться еще с некоторыми функциями, которые позволят нам сортировать ассоциативные массивы.

Как мы знаем, у ассоциативных массивов имеются ключи и значения. Следовательно, и сортировку можно производить по ключам, либо по значениям.

Давайте начнем с сортировки по значениям.

Для того, чтобы отсортировать значения ассоциативного массива в алфавитном порядке, мы применим функцию asort().

Для этого сначала создадим ассоциативный массив, применим функцию, выведем результат на экран.


Как Вы видите, значения ассоциативного массива отсортированы в алфавитном порядке, однако, их связь с ключами сохранена.

Таким же образом работает, и функция arsort(), за тем исключением, что она сортирует значения ассоциативного массива в обратном порядке.


Здесь опять же мы можем видеть, что значения элементов массива сохраняют свою связь с ключами, но отсортированы в обратном порядке.

Тот же самый ассоциативный массив мы можем отсортировать и по ключам.

Как Вы, наверное, уже догадались это можно сделать в алфавитном или обратном порядке.

Для того, чтобы сортировать массив по ключам в алфавитном порядке, нам понадобится функция ksort().


Массив отсортирован по ключам в алфавитном порядке.

Для того, чтобы отсортировать массив по его ключам в обратном порядке, применяется функция krsort().


Думаю, что из скриншота все понятно.

Пользовательская сортировка

Также мы можем задать и свои порядок сортировки, то есть создать пользовательскую сортировку.

Для этого также в php предусмотрены специальные функции.

Для пользовательской сортировки списков предусмотрена функция usort().

Она будет принимать два аргумента. Первый аргумент – это наш массив; второй аргумент – будет содержать имя функции, сравнивающей два элемента.

Функция сравнения будет принимать две переменные и должна возвращать одно из значений:

1 – если первый элемент сравнения больше второго;

-1 – если второй больше первого;

0 – если элементы равны.

Таким образом мы, например, можем отсортировать элементы массива по возрастанию их длины.

Для этого сначала объявим сам массив, который будет содержать строковые элементы различной длины.

Далее создадим пользовательскую функцию, которая будет принимать две переменные и сравнивать их длины, а в результате сравнения будет возвращать одно из значений: 1, -1 или 0.

После этого воспользуемся функцией для пользовательской сортировки usort(). Ей передадим в качестве аргументов: имя нашего массива и имя функции, которую мы создали для сравнения элементов.

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


Получим мы следующий результат. Элементы нашего массива отсортированы в порядке увеличения их длины.

Также мы можем сделать пользовательскую сортировку ассоциативного массива по его ключам. Для этого нам понадобится функция uksort() и сам ассоциативный массив.

Давайте оставим пользовательскую функцию той же, то есть сравниваем длину ключей.


Ключи элементов массива отсортированы по возрастанию их длины.

И также мы можем создать пользовательскую сортировку ассоциативного массива по значениям его элементов. В этом нам поможет функция uasort().

Принцип все тот же.


Теперь массив отсортирован по увеличению длин его значений.

Конечно же, пользовательская функция может быть и другой, например, она может приводить значения к общему регистру или делать какие-либо другие вещи.

Чтобы хорошенько понять, как работает пользовательская сортировка, нужно попрактиковаться и попробовать написать какую-то свою функцию сравнения.

Однако, теперь, я думаю, у Вас есть полное представление о том, как можно сортировать элементы массива и каким образом эти отсортированные элементы использовать.

Практикуйтесь, пишите Ваши комментарии и делитесь статьей с друзьями при помощи кнопок социальных сетей.

Если Вы еще не подписаны на обновления блога, то подписывайтесь. Форма подписки находится ниже.

Сортировка относится к упорядочиванию элементов массива в алфавитном, числовом порядке с возрастанием или убыванием в соответствии с некоторой линейной зависимостью между элементами. Сортировка массивов значительно повышает эффективность поиска.

Функции PHP для сортировки массивов

PHP поставляется с рядом встроенных функций, разработанных специально для сортировки элементов массива различными способами. Здесь мы рассмотрим некоторые из этих функций, наиболее часто используемых для сортировки массивов:

  • sort() — сортирует массивы в порядке возрастания
  • rsort() — сортирует массивы в порядке убывания
  • asort() — сортирует ассоциативные массивы в порядке возрастания по значению
  • ksort() — сортирует ассоциативные массивы в порядке возрастания по ключу
  • arsort() — сортирует ассоциативные массивы в порядке убывания по значению
  • krsort() — сортирует ассоциативные массивы в порядке убывания по ключу

Сортировка массивов по возрастанию

Функция sort() используется для сортировки элементов индексированного массива в порядке возрастания (в алфавитном порядке для букв):

Пример

Результат выполнения кода:

Аналогично вы можете отсортировать числовые элементы массива в порядке возрастания:

Пример

Результат выполнения кода:

Сортировка массивов по убыванию

Функция rsort() используется для сортировки элементов индексированного массива в порядке убывания (в алфавитном порядке для букв):

Пример

Результат выполнения кода:

Точно так же вы можете отсортировать числовые элементы массива в порядке убывания:

Пример

Результат выполнения кода:

Сортировка ассоциативных массивов в порядке возрастания по значению

Функция asort() сортирует элементы ассоциативного массива в порядке возрастания в соответствии со значением. Принцип её работы аналогичен функции sort() , но при сортировке сохраняется связь между ключами и их значениями:

Пример

Результат выполнения кода:

Сортировка ассоциативных массивов по значению в порядке убывания

Функция arsort() сортирует элементы ассоциативного массива в порядке убывания в соответствии со значением. Принцип её работы аналогичен функции rsort() , но при сортировке сохраняет связь между ключами и их значениями:

Пример

Результат выполнения кода:

Сортировка ассоциативных массивов в порядке возрастания по ключу

Функция ksort() сортирует элементы ассоциативного массива в порядке возрастания по их ключам. Она сохраняет связь между ключами и их значениями при сортировке, так же как и функция asort() :

Пример

Результат выполнения кода:

Сортировка ассоциативных массивов в порядке убывания по ключу

Функция krsort() сортирует элементы ассоциативного массива в порядке убывания по их ключам . Она сохраняет связь между ключами и их значениями при сортировке, так же как и функция arsort() :

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

  • Многомерный массив;
  • Встроенные функции PHP usort () , uasort () или uksort () ;
  • Встроенные функции PHP strcasecmp() или strcmp() .

Реализация :
Допустим что, у нас есть массив:

Здесь можно осуществить сортировку двумерного массива PHP по параметру grade ( оценка ) ( числовая сортировка ) или name ( имя ) ( сортировка в алфавитном порядке ).

Внешний массив $students состоит из пяти элементов, каждый из которых также представлен в виде отдельного массива. Внутренний массив использует ID студента в качестве ключа и хранит два значения: имя студента и его оценку.

Для сортировки многомерного массива мы задаем собственную функцию. Говорим PHP , что именно ее нужно использовать для вызова встроенных функций usort () , uasort () или uksort () .

Определяемая функция должна принимать два параметра и возвращать значение, указывающее, какой именно параметр идет первым по списку. Отрицательное или false значение говорит о том, что первый параметр указывается до второго. Положительное или true — что вначале идет второй параметр. Нулевое значение ( 0 ) указывает, что оба параметра равнозначны.

A – Сортировка по оценке (параметр grade) (числовая сортировка)

Определим функцию для сортировки массива по оценке ( параметр grade ):

Затем возьмем пользовательскую функцию и осуществим перебор двумерного массива PHP по первому ключу. Выглядит это примерно так:

Массив отсортирован по оценке

PHP будет отправлять внутренние массивы к этой функции для дальнейшей сортировки. Если вам интересно, как все это происходит в деталях, то выведите на экран результаты сравнения значений внутри функции. А саму функцию после PHP создания двумерного массива измените следующим образом:

Выводя на экран значения $x[‘оценка’] и $y [‘оценка’] , можно увидеть, как вызывается функция сортировки, определенная пользователем.

Можно сократить функцию grade_sort следующим образом:

Результаты сортировки двумерного массива PHP по оценке отображены на картинке ниже:

A – Сортировка по оценке (параметр grade) (числовая сортировка)

Примечание : Функция usort () сортирует по значениям, но не сохраняет ключи ( для внешнего массива ). Если ключи нужны, то лучше использовать функцию uasort () .

B – Сортировка по имени (в алфавитном порядке)

Чтобы отсортировать массив $students по первому ключу, необходимо сравнить две строки. Поэтому в примере с сортировкой в алфавитном порядке воспользуемся функция strcasecmp() ( не чувствительна к регистру ) и strcmp() ( чувствительна к регистру ). Получившийся двумерный массив PHP будет иметь следующий вид:

Массив отсортирован по имени

На скриншоте, приведенном ниже, показан результат сортировки по имени:

B – Сортировка по имени (в алфавитном порядке)

Пожалуйста, оставьте ваши отзывы по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, отклики, дизлайки, лайки, подписки!

Пожалуйста, оставьте ваши мнения по текущей теме материала. Мы очень благодарим вас за ваши комментарии, дизлайки, отклики, лайки, подписки!

БлогNot. Десять алгоритмов сортировки массива на PHP

Десять алгоритмов сортировки массива на PHP

Совсем недавно я ругался, что PHP - не язык для вычислительных сервисов и экспериментов, а у самого такого добра тоже немало. Просто удобно на нём писать, паршивце.

Ниже прикреплю небольшой скрипт на классическую тему - для запуска и сравнения методов сортировки массива числовых значений. Размещать этот сервис онлайн я не буду, но вы легко можете скачать исходники и установить его себе на локальный хост или реальный хостинг.

Список применяемых методов сортировки неполон, кроме того, исключён ряд известных алгоритмов, например, сортировка подсчётом и Bead sort, "в норме" сортирующие только неотрицательные значения, или сортировка по частям, требующая дополнительных аргументов, кроме параметра-массива, или заведомо тупейшая "обезьянья".

Основной файл index.php выводит форму и запускает весь процесс, вот скриншот:

методы сортировки на PHP, окно приложения (фрагмент)


методы сортировки на PHP, окно приложения (фрагмент)

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

Модуль functions.php содержит функции для методов сортировки и пару простых сервисных методов - генерация массива случайных значений размерности $n из диапазона [$min;$max] и вывод массива в абзац текста, только их и приведу:

Класс для снятия меток времени timer.php заметно упрощён по сравнению с этим:

Всем файлам нужен PHP 5.0 и выше, кодировка файлов из архива - Юникод (utf-8).

Вот результаты моего прогона скрипта на локальном хосте, разумеется, ваши цифры могут отличаться.

Отсортировано алгоритмом: Пузырьком, время = 0.640625 с.

Отсортировано алгоритмом: Перемешиванием, время = 0.734375 с.

Отсортировано алгоритмом: Расчёской, время = 0.015625 с.

Отсортировано алгоритмом: Гномья, время = 0.53125 с.

Отсортировано алгоритмом: Вставками, время = 0.3125 с.

Отсортировано алгоритмом: Слиянием, время = 0.109375 с.

Отсортировано алгоритмом: Терпеливая, время = 0.328125 с.

Отсортировано алгоритмом: Быстрая, время = 0.015625 с.

Отсортировано алгоритмом: Выбором, время = 0.453125 с.

Отсортировано алгоритмом: Шелла, время = 0.015625 с.

Даже из этого элементарного теста на быстродействие видно, какие алгоритмы сортировки лучше. Выполнялся он всего-то на 999 элементах, для более достоверных тестов следует увеличить размерности в скрипте и пользоваться компом, которого не жалко :)

Читайте также: