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");
?>
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Сортировка, поиск и случайные числа. Часть Вторая.
18-05-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Сортировка, поиск и случайные числа | PHP. Сортировка, поиск и случайные числа. Часть Третья. |