Сортировка массива в php

/ 👁 4874

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

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

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

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

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

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

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

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

<?
$Mass = array('Катя', 'Аня', 'Лена','Андрей');
sort($Mass);
print_r($Mass);
?>

 

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

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

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

<?
$Mass = array('Катя', 'Аня', 'Лена','Андрей');
rsort($Mass);
print_r($Mass);
?>

 

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

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

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

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

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

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

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

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

<?
$Mass['один']='Катя';
$Mass['два']='Борис';
$Mass['три']='Аня';
$Mass['четыре']='Рита';
asort($Mass);
print_r($Mass);
?>

 

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

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

<?
$Mass['один']='Катя';
$Mass['два']='Борис';
$Mass['три']='Аня';
$Mass['четыре']='Рита';
arsort($Mass);
print_r($Mass);
?>

 

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

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

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

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

<?
$Mass['один']='Катя';
$Mass['два']='Борис';
$Mass['три']='Аня';
$Mass['четыре']='Рита';
ksort($Mass);
print_r($Mass);
?>

 

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

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

<?
$Mass['один']='Катя';
$Mass['два']='Борис';
$Mass['три']='Аня';
$Mass['четыре']='Рита';
krsort($Mass);
print_r($Mass);
?>

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<?
$Mass = array('Андрей', 'Яна', 'Катя');
function check_length($str1,$str2){
$length1 = strlen($str1);
$length2 = strlen($str2);
if($length1 == $length2):
return 0;
elseif($length1 < $length2):
return -1;
else:
return 1;
endif;	
}
usort($Mass,"check_length");
print_r($Mass);
?>

 

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

 

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

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

<?
$Mass['один']='яна';
$Mass['два']='андрей';
$Mass['три']='катя';
function check_length($str1,$str2){
$length1 = strlen($str1);
$length2 = strlen($str2);
if($length1 == $length2):
return 0;
elseif($length1 < $length2):
return -1;
else:
return 1;
endif;	
}
uksort($Mass,"check_length");
print_r($Mass);
?>

 

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

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

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

<?
$Mass['один']='яна';
$Mass['два']='андрей';
$Mass['три']='катя';
function check_length($str1,$str2){
$length1 = strlen($str1);
$length2 = strlen($str2);
if($length1 == $length2):
return 0;
elseif($length1 < $length2):
return -1;
else:
return 1;
endif;	
}
uasort($Mass,"check_length");
print_r($Mass);
?>

 

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

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

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

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

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

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

С Вами была Анна Котельникова. До встречи в следующих статьях.

Leave a Reply