21.2. Встроенные функции сортировки
На практике создавать собственные функции сортировки не обязательно. PHP располагает несколькими функциями для решения задачи сортировки массивов. Самой типичной из них является функция sort (см. главу 11, "Данные"). Очень полезно будет сравнить на практике функции sort и rsort, asort и ksort.
Функция sort выстраивает все элементы массива в возрастающем порядке. Если массив содержит строку, это означает, что они будут отсортированы в соответствии с ASCII-кодами всех символов. Если массив содержит числа, он будет отсортирован по числовым значениям. Индексы - значения, используемые для ссылки на элементы, - замещаются целыми числами, начиная с нуля. Этот эффект продемонстрирован в листинге 21.1; на рис. 21.1 показан вывод, полученный с помощью этого сценария. Обратите внимание на то, что если для индексирования исходного массива использовались цифры и строки, после их сортировки все элементы будут пронумерованы от нуля до четырех. Таким образом, очищать индексы массива никогда не надо.
Другой момент в листинге 21.1 не срабатывает: это порядок выводимых значений - Apple, Blueberry, Watermelon, apple, pear. В словаре слово "apple" может упоминаться до или после слова "Apple", но ASCII-код буквы "A" равен 65, а ASCII-код буквы "a" - 97. ASCII-коды всех букв приведены в приложении Б, "ASCII-коды". Ниже в этой главе приводится алгоритм сортировки символической информации, которая не зависит от регистра. 
Листинг 21.1. Сортировка с помощью функции sort

<?php /*
** Заполним массив fruit различными случайными значениями */
$fruit[1] = "Apple"; $fruit[13] = "apple"; $fruit[64] = "Blueberry"; $fruit[3] = "pear"; $fruit["last"] = "Watermelon";
//отсортируем массив sort($fruit);
//выведем массив в отсортированном виде
print("<pre>");
print_r($fruit);
print("</pre>n");
?>
Сортировка, поиск и случайные числа
Функция rsort позволяет выполнить сортировку аналогично функции sort, но в обратном порядке. Внесем соответствующие коррективы в листинг 21.1 и заменим функцию sort функцией rsort.
Две другие функции сортировки, asort и arsort, работают немного не так: они сохраняют связи между индексом и элементом. Это очень удобно при работе с ассо­циативными массивами. Если массив проиндексирован числами, вероятно, необязательно сохранять их индексы, но, с другой стороны, а что если они сохранены? В листинге 21.2 продемонстрирован возможный сценарий, результат работы которого предоставлен на рис. 21.2.

| Листинг 21.2. Использование функции asort_
<?php
// Заполнить массив в порядке предпочтения $pasta = array(1=>"ravioli", "spaghetti", 
"vermicelli",
"lasagna",
"gnocchi",
"rigatoni"); // Отсортировать массив, сохраняя его индексы asort($pasta);
// Распечатать массив в алфавитном порядке
foreach($pasta as $rank=>$name)
{
print("$name имеет ранг $rank<br>n");
}
Сортировка, поиск и случайные числа
Сценарий в листинге 21.2 принимает все элементы в порядке, в котором они существуют в памяти. Они сохраняют свои первоначальные индексы, являющиеся числами, начиная с нуля. При использовании функции arsort получаем обратный порядок. Вероятно, что листинг 21.3 является примером наиболее типичного использования функций подобного рода. Необходимо хранить элементы в массиве, возвращаемом функцией getdate, в проиндексированном виде. В листинге 21.3 показано, что массив сортируется в обратном порядке по элементам. Практической ценности данный пример не имеет, но иллюстрирует использование этих функций. Результат работы сценария показан на рис. 21.3.

| Листинг 21.3. Использование функции arsort_
<?php
//получить массив от функции getdate $today = getdate();
// Отсортировать массив, сохраняя индексы arsort($today);
//Распечатать массив в порядке убывания
print("<pre>");
print_r($today);
print("</pre>n");
?>
Сортировка, поиск и случайные числа