Приднестровская поддержка XOOPS
Функция sort() позволяет отсортировать список в алфавитном порядке, а функция rsort() — в обратном порядке:
$Mass = array('Один', 'Два', 'Три', 'Четыре');
sort($Mass);
print_r($Mass);
// Array ( [0] => Два [1] => Один [2] => Три [3] => Четыре )
rsort($Mass);
print_r($Mass);
// Array ( [0] => Четыре [1] => Три [2] => Один [3] => Два )
Для сортировки ассоциативных массивов эти функции не применяются, так как они разрывают связь ключа со значением. Отсортировать ассоциативный массив можно или по ключам, или по значениям. Для этого используются следующие функции:
□ asort() — сортировка по значениям в алфавитном порядке;
□ arsort() — сортировка по значениям в обратном порядке:
$Mass['Один'] = 1;
$Mass['Два'] = 2;
$Mass['Три'] = 3;
$Mass['Четыре'] = 4;
arsort($Mass);
print_r($Mass);
// Array ( [Четыре] => 4 [Три] => 3 [Два] => 2 [Один] => 1 )
□ ksort() — сортировка по ключам в алфавитном порядке;
□ krsort() — сортировка по ключам в обратном порядке:
$Mass['Один'] = 1;
$Mass['Два'] = 2;
$Mass['Три'] = 3;
$Mass['Четыре'] = 4;
krsort($Mass);
print_r($Mass);
// Array ( [Четыре] => 4 [Три] => 3 [Один] => 1 [Два] => 2 )
Если нужно изменить порядок стандартной сортировки, можно задать свою
сортировку с помощью следующих функций:
□ usort() — для пользовательской сортировки списков;
□ uksort() — для пользовательской сортировки ассоциативных массивов по ключам;
□ uasort() — для пользовательской сортировки ассоциативных массивов по значениям.
В качестве первого аргумента этим функциям передается массив, а второй аргумент должен содержать имя функции, сравнивающей два элемента.
Функция сравнения принимает две переменные и должна возвращать:
□ 1 — если первый больше второго;
□ -1 — если второй больше первого;
□ 0 — если элементы равны.
Например, стандартная сортировка зависит от регистра символов:
$Mass = array('единица1', 'Единый', 'Единица2');
sort($Mass);
print_r($Mass);
// Array ( [0] => Единица2 [1] => Единый [2] => единица1 )
В результате мы получим неправильную сортировку, ведь Единый и Единица2 больше единица1. Изменим стандартную сортировку на свою сортировку, не учитывающую регистр (листинг 12).
Листинг 12. Сортировка без учета регистра
function f_sort($Str1, $Str2) { // Сортировка без учета регистра
$Str1_1 = strtolower($Str1); // Преобразуем к нижнему регистру
$Str2_1 = strtolower($Str2); // Преобразуем к нижнему регистру
if ($Str1_1>$Str2_1) return 1;
if ($Str1_1<$Str2_1) return -1;
return 0;
}
setlocale(LC_CTYPE, "ru_RU.CP1251"); // Настройка локали
$Mass = array('единица1', 'Единый', 'Единица2');
usort($Mass, "f_sort");
print_r($Mass);
// Array ( [0] => единица1 [1] => Единица2 [2] => Единый )
Для получения правильной сортировки мы приводим две переменные к одному регистру, а затем производим стандартное сравнение. Заметьте, что регистр самих элементов массива не изменяется, так как мы работаем с их копиями. Для правильной работы функции strtolower() с русским языком необходимо настроить локаль. Это позволяет сделать функция setiocale(). Более подробно мы рассмотрим функцию setiocale() при изучении функций обработки строк (см. разд. 15.2).
Отправитель | Нити |
---|
1 пользователь(ей) активно (1 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 1 далее... |