PHP функции для сортировки массива
Когда нужно отсортировать массив по каким-либо критериям, то, скорее всего, в PHP есть функция, которая поможет в этом. Но функций для сортировки массивов, что это может немного запутать. Например, PHP sort и другие.
Я думаю, что команда PHP понимает это, так как на php.net есть удобная сводная таблица по этим функциям. В этой статье я хочу рассмотреть основные функции сортировки массивов.
Некоторые из этих функций имеют двойников, которые содержат букву

в названиях.

означает «реверс» и указывает на порядок сортировки. Порядок сортировки по умолчанию, который мы будем рассматривать - по возрастанию (от меньшего к большему), тогда как «реверсивные» функции сортируют в порядке убывания (от большего к меньшему).
Функции, которые применяются к неассоциативным массивам
Во время сортировки функции не сохраняют ключ массива (индекс) для связи значений его элементов. Именно поэтому они, как правило, применяется к неассоциативным массивам, для которых сохранение связи ключей не столь важно, как при работе с ассоциативными массивами.
- PHP array sort: Сортировка массива «по умолчанию»;
- rsort: Сортировка массива в обратном порядке.
Флаг сортировки может быть передан в качестве второго аргумента функции для задания типа сортировки. В приведенном ниже примере я указываю функции сравнить элементы массива как строки:
$text = array('Interdum congue nec', 'Duis et sollicitudin',
'Vestibulum sit amet', 'Duis luctus porttitor',
'Nunc massa lectus');
sort($text, SORT_STRING);
До сортировки массив $text выглядит следующим образом:
array (size=5)
0 => string ‘Interdum congue nec’ (length=19)
1 => string ‘Duis et sollicitudin’ (length=20)
2 => string ‘Vestibulum sit amet’ (length=19)
3 => string ‘Duis luctus porttitor’ (length=21)
4 => string ‘Nunc massa lectus’ (length=17)
После сортировки с помощью функции sort PHP (массив был переиндексирован):
array (size=5)
0 => string ‘Duis et sollicitudin’ (length=20)
1 => string ‘Duis luctus porttitor’ (length=21)
2 => string ‘Interdum congue nec’ (length=19)
3 => string ‘Nunc massa lectus’ (length=17)
4 => string ‘Vestibulum sit amet’ (length=19
Если поддержание связи индекса-значения существенно, тогда можно использовать одну из функций для ассоциативных массивов (смотрите ниже).
Функции для применения к ассоциативным массивам
Использование каждой из перечисленных ниже функций гарантирует, что соответствие между ключами и значениями после сортировки будет сохраняться. Разница заключается в том, хотите ли вы отсортировать массив по ключам или значениям.
- asort: Ассоциативная сортировка;
- arsort: Ассоциативная сортировка в обратном порядке;
- ksort: Работает таким же образом, как asort, но сортирует ключи массива;
- krsort: Работает таким же образом, как arsort, но сортирует ключи массива в обратном порядке.
Следующие функции специализируются на «естественном порядке» (что объясняет часть «nat» в имени функции) сравнения строк. Вторая функция не чувствительна к регистру:
- natsort;
- natcasesort.
Если asort была применена к тому же массиву, который мы рассматривали выше:
asort($text, SORT_STRING);
Отсортированный массив будет выглядеть следующим образом:
array (size=5)
1 => string ‘Duis et sollicitudin’ (length=20)
3 => string ‘Duis luctus porttitor’ (length=21)
0 => string ‘Interdum congue nec’ (length=19)
4 => string ‘Nunc massa lectus’ (length=17)
2 => string ‘Vestibulum sit amet’ (length=19)
Функции сортировки массива по параметрам, определенным пользователем
В некоторых случаях нужно произвести некоторый логический анализ, который не может быть выполнен автоматически с помощью приведенных выше функций. Следующие функции сортировки (в отличие от PHP sort) принимают имя пользовательской функции в качестве аргумента и используют ее для сортировки массива.
usort: функция не поддерживает взаимосвязь между индексом и значением массива.
uasort: эта функция поддерживает взаимосвязь индекса-значения массива.
uksort: эта функция делает то же самое, но сортировка применяется к ключам массива.
Давайте предположим, что я провожу анализ текста, и хочу отсортировать фразы по длине:
$text = array('Interdum congue nec', 'Duis et sollicitudin',
'Vestibulum sit amet', 'Duis luctus porttitor',
'Nunc massa lectus');
//Определенная пользователем функция обратного вызова
function compareStrLength($a, $b){
$lenA = strlen($a);
$lenB = strlen($b);
if ($lenA == $lenB) { return 0; }
//Порядок по возрастанию
return ($lenA < $lenB) ? -1 : 1;
//"Реверсивный" порядок по возрастанию
//возвращает ($lenA > $lenB) ? -1 : 1;
}
uasort($text, 'compareStrLength');
Отсортированный массив $text будет выглядеть следующим образом:
array (size=5)
4 => string ‘Nunc massa lectus’ (length=17)
0 => string ‘Interdum congue nec’ (length=19)
2 => string ‘Vestibulum sit amet’ (length=19)
1 => string ‘Duis et sollicitudin’ (length=20)
3 => string ‘Duis luctus porttitor’ (length=21)
На этом мой обзор средств сортировки массива (функции sort PHP и других) закончен. Я не включил в него все функции, так как моя цель состояла в том, чтобы подчеркнуть разницу между функциями с аналогичными названиями. Еще одна важная функция сортировки - array_multisort. Она может быть использована для многомерных массивов, которые я не описал в данной статье.