(PHP 4, PHP 5, PHP 7)
krsort — Сортирует массив по ключам в обратном порядке
Описание
Сортирует массив по ключам в обратном порядке, сохраняя отношения между ключами и значениями. Эта функция полезна, в основном, для работы с ассоциативными массивами.
Список параметров
Вы можете изменить поведение сортировки, используя дополнительный параметр sort_flags , подробнее см. sort() .
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Примеры
Пример #1 Пример использования krsort()
(PHP 3, PHP 4, PHP 5)
ksort — Отсортировать массив по ключам
Описание bool ksort ( array &array [, int sort_flags] )
Сортирует массив по ключам, сохраняя отношения между ключами и значениями. Функция полезна, в основном, для работы с ассоциативными массивами.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Пример 1. Пример использования ksort()
= array( "d" => "lemon" , "a" => "orange" , "b" => "banana" , "c" => "apple" ); ksort ( $fruits ); reset ( $fruits ); while (list( $key , $val ) = each ( $fruits )) < echo "$key = $val " ; > ?> |
Результат выполнения данного примера:
a = orange b = banana c = apple d = lemon
Вы можете изменить поведение сортировки, используя дополнительный параметр sort_flags , подробнее см. sort() .
Замечание: Второй параметр был добавлен в PHP 4.
В PHP есть несколько функций для сортировки массивов, на этой странице дается их общее описание.
Основные различия между функциями:
- В одних функциях массивы ( array ) сортируются по ключам элементов, в других по значениям: $array[‘ключ’] = ‘значение’;
- В каких-то функциях связь между ключами и значениями после сортировки сохраняется, в каких-то нет. Это может приводить к тому, что ключи будут сбрасываться в числовые значения (0, 1, 2, . ).
- Различия в порядке сортировки: алфавитный, возрастающий, убывающий, числовой, естественный, случайный или определенный пользователем
- Примечание: Все функции сортировки модифицируют переданный массив, а не возвращают отсортированную копию
- Если функции определяют два элемента как равные, порядок сортировки в этом случае не определен (нестабильная сортировка).
Имя функции | Сортирует по | Сохраняет связь ключ – значение | Порядок сортировки | Похожие функции |
---|---|---|---|---|
array_multisort() | значению | ассоциативные да, числовые нет | первый массив или настройки сортировки | array_walk() |
asort() | значению | да | по возрастанию | arsort() |
arsort() | значению | да | по убыванию | asort() |
krsort() | ключу | да | по убыванию | ksort() |
ksort() | ключу | да | по возрастанию | asort() |
natcasesort() | значению | да | естественный, нечувствительный к регистру | natsort() |
natsort() | значению | да | естественный | natcasesort() |
rsort() | значению | нет | по убыванию | sort() |
shuffle() | значению | нет | случайный | array_rand() |
sort() | значению | нет | по возрастанию | rsort() |
uasort() | значению | да | определяется пользователем | uksort() |
uksort() | ключу | да | определяется пользователем | uasort() |
usort() | значению | нет | определяется пользователем | uasort() |
User Contributed Notes 3 notes
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:
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" );
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:
( $array , ‘strcasecmp’ );
?>
Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.
Stabilizing the sort functions (in this case, usort).
function stable_usort (& $array , $cmp )
<
$i = 0 ;
$array = array_map (function( $elt )use(& $i )
<
return [ $i ++, $elt ];
>, $array );
usort ( $array , function( $a , $b )use( $cmp )
<
return $cmp ( $a [ 1 ], $b [ 1 ]) ?: ( $a [ 0 ] – $b [ 0 ]);
>);
$array = array_column ( $array , 1 );
>
?>
Tags each array element with its original position in the array so that when the comparison function returns 0 the tie can be broken to put the earlier element first.