ksort()
Функция ksort() в PHP сортирует массив по ключам в порядке возрастания, сохраняя связь ключей со значениями.
PHP функция: Array ksort()
Функция PHP ksort() сортирует массив по ключам в порядке возрастания, сохраняя связь каждого ключа с его исходным значением. Она является аналогом asort(), который сортирует по значению, и противоположностью krsort(), который сортирует ключи в порядке убывания.
На этой странице рассматривается, когда использовать ksort(), её синтаксис, параметры и возвращаемое значение, доступные флаги типа сортировки, а также несколько практических примеров (включая распространённую ловушку при сортировке числовых строковых ключей).
Когда использовать ksort()
Используйте ksort(), когда ключи несут смысловую нагрузку и вы хотите упорядочить массив по ним — например:
- Сортировка ассоциативного массива пар
name => valueв алфавитном порядке по имени. - Приведение записей конфигурации или HTTP-заголовков в предсказуемый, детерминированный порядок.
- Упорядочивание данных, индексированных по году, ID или категории, перед итерацией или отображением.
Поскольку ksort() сохраняет связь ключей и значений, это правильный инструмент в тех случаях, когда переиндексация массива (как делает обычный sort()) привела бы к потере информации. Смотрите обзор Сортировка массивов для сравнения всех функций сортировки PHP.
Синтаксис
ksort($array, $sorting_type);Параметры
Функция ksort() принимает два параметра:
| Параметр | Обязательный | Описание |
|---|---|---|
$array | Да | Массив для сортировки. Передаётся по ссылке и изменяется на месте. |
$sorting_type | Нет | Флаг, управляющий способом сравнения ключей (см. таблицу ниже). По умолчанию SORT_REGULAR. |
Флаг $sorting_type принимает следующие константы:
| Флаг | Поведение |
|---|---|
SORT_REGULAR | Сравнивает элементы обычным образом (по умолчанию). Числовые строки сравниваются как числа. |
SORT_NUMERIC | Сравнивает элементы численно. |
SORT_STRING | Сравнивает элементы как строки. |
SORT_NATURAL | Сравнивает элементы как строки с использованием «естественного порядка» (как natsort()). |
SORT_LOCALE_STRING | Сравнивает элементы как строки с учётом текущей локали. |
Примечание: ksort() изменяет исходный массив на месте — она не возвращает новый отсортированный массив. Исходный порядок ключей теряется после вызова.
Возвращаемое значение
Функция ksort() возвращает boolean: true при успехе и false при неудаче.
Пример 1: Сортировка ассоциативного массива по ключу
Здесь ключами являются имена людей, поэтому ksort() упорядочивает массив в алфавитном порядке по имени (Ben, Joe, Peter), сохраняя связь каждого имени с правильным возрастом:
Вывод:
Array
(
[Ben] => 37
[Joe] => 43
[Peter] => 35
)Пример 2: Сортировка ассоциативного массива по ключу в обратном порядке
Для сортировки ключей в порядке убывания используйте krsort() — она работает точно так же, как ksort(), но переворачивает результат:
Вывод:
Array
(
[Peter] => 35
[Joe] => 43
[Ben] => 37
)Пример 3: Сортировка индексированного массива по ключу
Индексированный массив уже имеет ключи 0, 1, 2, 3 в порядке, поэтому сортировка по ключу оставляет элементы без изменений. Это показывает, что ksort() сортирует ключи, а не значения — чтобы отсортировать именно значения, используйте sort():
Вывод:
Array
(
[0] => red
[1] => green
[2] => blue
[3] => yellow
)Пример 4: Сортировка индексированного массива по ключу в обратном порядке
Разворот порядка ключей индексированного массива с помощью krsort() сохраняет каждое значение с его исходным числовым ключом, поэтому элементы отображаются в обратном порядке вставки:
Вывод:
Array
(
[3] => yellow
[2] => blue
[1] => green
[0] => red
)Ловушка: числовые строковые ключи и флаг сортировки
Распространённым сюрпризом является сортировка массива, ключи которого являются числовыми строками. По умолчанию (SORT_REGULAR) PHP сравнивает их как числа, поэтому "10" идёт после "2". Передача SORT_STRING сравнивает их посимвольно, ставя "10" перед "2":
<?php
$data = ["10" => "a", "1" => "b", "2" => "c"];
ksort($data); // SORT_REGULAR (numeric)
print_r($data);
ksort($data, SORT_STRING); // string comparison
print_r($data);Вывод:
Array
(
[1] => b
[2] => c
[10] => a
)
Array
(
[1] => b
[10] => a
[2] => c
)Выбирайте флаг $sorting_type, соответствующий тому, как вы хотите интерпретировать ключи.
Заключение
Функция ksort() сортирует PHP-массив по ключам в порядке возрастания, на месте, сохраняя каждую пару ключ/значение. Используйте её, когда ключи имеют смысловую нагрузку и порядок важен; используйте krsort() для сортировки в порядке убывания, asort() / arsort() для сортировки по значению с сохранением ключей, или sort(), когда хотите полностью отказаться от ключей. Правильно выбирайте флаг $sorting_type — особенно когда ключи являются числовыми строками — чтобы получить ожидаемое сравнение.
graph TD
A[PHP array] -->|ksort| B[Sorted PHP array]