W3docs

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), сохраняя связь каждого имени с правильным возрастом:

php— editable, runs on the server

Вывод:

Array
(
    [Ben] => 37
    [Joe] => 43
    [Peter] => 35
)

Пример 2: Сортировка ассоциативного массива по ключу в обратном порядке

Для сортировки ключей в порядке убывания используйте krsort() — она работает точно так же, как ksort(), но переворачивает результат:

php— editable, runs on the server

Вывод:

Array
(
    [Peter] => 35
    [Joe] => 43
    [Ben] => 37
)

Пример 3: Сортировка индексированного массива по ключу

Индексированный массив уже имеет ключи 0, 1, 2, 3 в порядке, поэтому сортировка по ключу оставляет элементы без изменений. Это показывает, что ksort() сортирует ключи, а не значения — чтобы отсортировать именно значения, используйте sort():

php— editable, runs on the server

Вывод:

Array
(
    [0] => red
    [1] => green
    [2] => blue
    [3] => yellow
)

Пример 4: Сортировка индексированного массива по ключу в обратном порядке

Разворот порядка ключей индексированного массива с помощью krsort() сохраняет каждое значение с его исходным числовым ключом, поэтому элементы отображаются в обратном порядке вставки:

php— editable, runs on the server

Вывод:

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]

Практика

Практика
Какова цель функции ksort() в PHP?
Какова цель функции ksort() в PHP?
Was this page helpful?