В PHP есть несколько функций для сортировки массивов, на этой странице даётся их общее описание.
Основные различия между функциями:
$array['ключ'] = 'значение';
| Имя функции | Сортирует по | Сохраняет связь ключ - значение | Порядок сортировки | Похожие функции |
|---|---|---|---|---|
| array_multisort() | значению | строковые (string ) ключи да, числовые (int ) - нет | первый массив или настройки сортировки | array_walk() |
| asort() | значению | да | по возрастанию | arsort() |
| arsort() | значению | да | по убыванию | asort() |
| krsort() | ключу | да | по убыванию | ksort() |
| ksort() | ключу | да | по возрастанию | krsort() |
| natcasesort() | значению | да | естественный, нечувствительный к регистру | natsort() |
| natsort() | значению | да | естественный | natcasesort() |
| rsort() | значению | нет | по убыванию | sort() |
| shuffle() | значению | нет | случайный | array_rand() |
| sort() | значению | нет | по возрастанию | rsort() |
| uasort() | значению | да | определяется пользователем | uksort() |
| uksort() | ключу | да | определяется пользователем | uasort() |
| usort() | значению | нет | определяется пользователем | uasort() |
While this may seem obvious, user-defined array sorting functions ( uksort(), uasort(), usort() ) will *not* be called if the array does not have *at least two values in it*.
The following code:
<?php
function usortTest($a, $b) {
var_dump($a);
var_dump($b);
return -1;
}
$test = array('val1');
usort($test, "usortTest");
$test2 = array('val2', 'val3');
usort($test2, "usortTest");
?>
Will output:
string(4) "val3"
string(4) "val2"
The first array doesn't get sent to the function.
Please, under no circumstance, place any logic that modifies values, or applies non-sorting business logic in these functions as they will not always be executed.Another way to do a case case-insensitive sort by key would simply be:
<?php
uksort($array, 'strcasecmp');
?>
Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.