Сортировка массивов
Одной из самых замечательных возможностей, предоставляемых языком РНР при работе с массивами, является их сортировка. Исходно интерпретатор РНР размещает значения элементов массива в указанном вами порядке и позволяет соответствующим образом выводить их. Очень часто необходимо изменить порядок следования элементов. Например, нужно отсортировать элементы массива в алфавитном порядке по индексу или по значению.
Язык РНР предоставляет широкие возможности при сортировке массивов. Например, чтобы изменить порядок следования элементов массива с числами в качестве индексов, следует воспользоваться функцией sort():
sort($имя_массива);
Это выражение сортирует элементы массива по значению и присваивает им новые индексы в порядке следования. При этом сначала идут значения, начинающиеся с чисел, потом — с прописных и строчных букв. Например, рассмотрим массив $streets:
$streets[0] = "ул. Вязов";
$streets[1] = "ул. Дубов";
$streets[2] = "7-ая авеню";
Использование выражения sort($streets);
приведет к следующему:
$streets[0] = "7-ая авеню";
$streets[1] = "ул. Вязов";
$streets[2] = "ул. Дубов";
Если же использовать функцию sort() для сортировки массива, индексами которого являются текстовые строки, РНР преобразует их в числа.
Поэтому для таких целей необходимо воспользоваться функцией asort():
asort($capitals);
Это выражение сортирует значения столиц по значению, при этом не изменяя индексы массива. Рассмотрим массив $capitals, созданный в предыдущем разделе:
$capitals['СА'] = "Сакраменто";
$capitals['TX'] = "Остин";
$capitals['OR'] = "Салем";
При использовании выражения asort($capitals);
получим следующее:
$capitals['TX'] = "Остин"
$capitals['СА'] = "Сакраменто"
$capitals['OR'] = "Салем"
Заметим, что порядок следования индексов массива изменяется в соответствии со значениями. Теперь столицы расположены в алфавитном порядке. Если бы в качестве индексов массива использовались числа, то они бы тоже поменяли свой порядок. Например, пусть имеется массив
$capitals[1] = "Сакраменто";
$capitals[2] = "Остин";
$capitals[3] = "Салем";
Результатом выполнения функции asort() будет:
$capitals[2] = "Остин"
$capitals[1] = "Сакраменто"
$capitals[3] = "Салем"
Врядли эта функция будет полезна для массивов с числовыми индексами.
Язык РНР предоставляет также и другие возможности для сортировки массивов различными способами. Ниже в таблице представлены необходимые для этого функции.
Сортировка массивов | Описание |
sort($имя_массива) | Сортирует значения элементов массива по возрастанию, присваивая им при этом новые числовые индексы |
asort($имя_массива) | Сортирует значения элементов массива по возрастанию, не изменяя при этом индексы |
rsort($имя_массива) | Сортирует значения элементов массива по убыванию, присваивая при этом новые числовые индексы |
arsort($имя_массива) | Сортирует значения элементов массива по убыванию, не изменяя при этом индексы |
ksort($имя_массива) | Сортирует индексы элементов массива по возрастанию |
krsort($имя_массива) | Сортирует индексы элементов массива по убыванию |
usort($имя_массива, имя_функции) | Пользовательская сортировка, определяемая функцией имя_функции |
natsort($имя_массива) | Сортирует смешанные значения (текстовые и числовые) элементов массива и устанавливает "естественный" порядок. Например, массив со значениями day1, day5, day11, day2 будет отсортирован следующим образом: day1, day2, day5, day11. В то время как результатом выполнения функции sort() будет: day1, day11, day2, day5 |