Основными функциями сортировки элементов массива являются функции
bool sort(array array [, int sort_flags])
bool rsort(array array [, int sort_flags])
bool asort(array array [, int sort_flags])
bool arsort(array array [, int sort_flags])
bool ksort(array array [, int sort_flags])
bool krsort(array array [, int sort_flags])
Функция sort() сортирует массив array по возрастанию, а функция rsort() – по убыванию значений элементов. Параметр sort_flags может иметь одно из трех значений: SORT_REGULAR – нормальное сравнение значений, SORT_NUMERIC – числовое сравнение значений и SORT_STRING – сравнение значений, как строк.
Функции asort()и arsort() выполняют те же операции, но с сохранением соответствий ключей и значений. Функции ksort() и krsort() сортируют массив array по ключам в прямом и обратном порядке. Все функции возвращают значение true в случае успешного завершения сортировки и false – в противном случае.
Сортировка массива array по значениям, ключам и с сохранением соответствий ключей и значений при использовании заданной пользователем функции сравнения cmp_function выполняют функции
bool usort(array array, callback cmp_function)
bool uksort(array array, callback cmp_function)
|
|
bool uasort(array array, callback cmp_function)
Эти функции также возвращают значение true в случае успешного завершения сортировки и false – в противном случае.
Сортировка алфавитно-цифровых строк в соответствии с «естественным» порядком (по алфавиту) в массиве array с учетом или без учета регистра строк выполняется с помощью функций
void natsort(array array)
void natcasesort(array array)
Функция
array array_reverse(array array [, bool preserve_keys])
переставляет элементы массива array в обратном порядке с сохранением ключей, если параметр preserve_keys равен true, а функция
bool shuffle(array array)
перемешивает элементы массива случайным образом и возвращает значение true в случае успешного завершения или false – в противном случае.
Пример 4.6.110. Использование функций asort() и natsort():
Три массива $a, $b и $c с одинаковыми значениями элементов сортируются с использованием разных критериев:
// Массивы $a, $b и $c с одинаковыми значениями
$a = $b = $c = array('str8', 'str12', 'str10', 'str2');
// Сортировка элементов массива $a как чисел
asort($a, SORT_NUMERIC);
// Вывод нового массива
print '$a: '; print_r($a);
// Сортировка элементов массива $b как строк
asort($b, SORT_STRING);
// Вывод нового массива
print '$b: '; print_r($b);
// Сортировка элементов массива $c
// в "естественном" порядке
natsort($c);
// Вывод нового массива
print '$c: '; print_r($c);
После сортировки массивы $a, $b и $c будут иметь следующий вид:
Пример 4.6.111. Использование функции usort():
Массив $a сортируется следующим образом: сначала идут элементы массива с нечетными значениями по возрастанию, затем элементы массива с четными значениями по убыванию:
// Сортировка 1 - сначала нечетные,
// потом четные числа
function oddEvenSort1($var1, $var2)
{
return $var1%2 == 0 && $var2%2!= 0;
|
|
}
// Сортировка 2 - четные числа по убыванию значений
function oddEvenSort2($var1, $var2)
{
return $var1%2 == 0 && $var2%2 == 0 && $var1 > $var2;
}
// Сортировка 3 - нечетные числа
// по возрастанию значений
function oddEvenSort3($var1, $var2)
{
return $var1%2!= 0 && $var2%2!= 0 && $var1 > $var2;
}
$a = array(8, 12, 5, 4, 7, 3, 9, 2); // Массив чисел
// Сортировка по трем критериям
usort($a, "oddEvenSort1");
usort($a, "oddEvenSort2");
usort($a, "oddEvenSort3");
// Вывод отсортированного массива
print '$a: '; print_r($a);
После сортировки массив $a будет иметь следующий вид: