Функция 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. Изменим стандартную сортировку на свою сортировку, не
учитывающую регистр.
Пользовательская сортировка
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() с русским
языком необходимо настроить локаль. Это позволяет сделать функция
setlocale(). Более подробно мы рассмотрим функцию setlocale() при
изучении функций обработки строк.
Комментариев нет:
Отправить комментарий