Ksort: примеры (PHP)
ksort(array &$array, int $flags = SORT_REGULAR): boolФункция ksort выполняет сортировку массива по ключам в порядке возрастания, сохраняя связи между ключами и значениями. Эта функция используется, когда требуется упорядочить ассоциативный массив по его ключам.
Функция принимает один обязательный аргумент – массив, передаваемый по ссылке, и один необязательный аргумент – флаг сортировки.
- array (обязательный) – исходный массив, который будет отсортирован. Передается по ссылке, поэтому функция изменяет исходный массив.
- flags (необязательный) – флаг, определяющий тип сравнения элементов. Доступные значения:
SORT_REGULAR
– обычное сравнение (по умолчанию);SORT_NUMERIC
– числовое сравнение;SORT_STRING
– строковое сравнение;SORT_LOCALE_STRING
– строковое сравнение с учетом текущей локали;SORT_NATURAL
– «естественная» сортировка строк;SORT_FLAG_CASE
– комбинируется с SORT_STRING или SORT_NATURAL для регистронезависимой сортировки.
Сортировка ассоциативного массива по ключам в порядке возрастания.
$arr = ["d" => "лимон", "a" => "апельсин", "b" => "банан", "c" => "яблоко"];
ksort($arr);
print_r($arr);Array
(
[a] => апельсин
[b] => банан
[c] => яблоко
[d] => лимон
)Когда ключи представлены как строки, но являются числами.
$arr = ["10" => 10, "2" => 2, "1" => 1];
ksort($arr, SORT_NUMERIC);
print_r($arr);Array
(
[1] => 1
[2] => 2
[10] => 10
)Естественная регистронезависимая сортировка строковых ключей.
$arr = ["img12.png" => 1, "IMG10.png" => 2, "img2.png" => 3, "img1.png" => 4];
ksort($arr, SORT_NATURAL | SORT_FLAG_CASE);
print_r($arr);Array
(
[img1.png] => 4
[img2.png] => 3
[IMG10.png] => 2
[img12.png] => 1
)В PHP существует несколько функций для сортировки массивов по ключам.
Функция krsort выполняет сортировку массива по ключам в порядке убывания. Параметры аналогичны ksort.
Функции asort и arsort сортируют массив по значениям, сохраняя связь с ключами, в порядке возрастания и убывания соответственно.
Функция uksort позволяет отсортировать массив по ключам, используя пользовательскую функцию сравнения. Используется для нестандартных алгоритмов сортировки.
Функцию ksort применяют для простой сортировки ассоциативных массивов по ключам. Если требуется обратный порядок, подходит krsort. Для сортировки по значениям с сохранением ключей используют asort/arsort. Пользовательскую логику сортировки ключей реализуют через uksort.
Функция ожидает массив. Передача другого типа данных вызовет предупреждение и вернет false.
$var = "это строка";
$result = ksort($var);
var_dump($result);Warning: ksort() expects parameter 1 to be array, string given bool(false)
Функция возвращает true в случае успеха и false в случае ошибки. Результат сортировки виден в измененном исходном массиве.
$arr = ["b" => 2, "a" => 1];
if (ksort($arr)) {
echo "Сортировка успешна";
} else {
echo "Ошибка сортировки";
}Сортировка успешна
Функция модифицирует переданный массив, а не возвращает новый.
$original = ["z" => 1, "a" => 2];
$sorted = ksort($original); // $sorted содержит true/false, а не массив
print_r($original); // Оригинальный массив измененArray
(
[a] => 2
[z] => 1
)Начиная с PHP 8.0.0, функция ksort теперь возвращает значение true в случае успеха. Ранее возвращалось значение true в случае успеха, однако в некоторых версиях могло возвращаться false при успешной сортировке некоторых типов массивов. Поведение было стандартизировано.
Других значительных изменений в поведении функции ksort в последних версиях PHP не было. Поддержка флагов сортировки остается стабильной.
ksort сортирует только ключи первого уровня.
$arr = [
"user2" => ["age" => 30, "name" => "Борис"],
"user1" => ["age" => 25, "name" => "Анна"],
"user3" => ["age" => 35, "name" => "Виктор"]
];
ksort($arr);
print_r($arr);Array
(
[user1] => Array
(
[age] => 25
[name] => Анна
)
[user2] => Array
(
[age] => 30
[name] => Борис
)
[user3] => Array
(
[age] => 35
[name] => Виктор
)
)По умолчанию числовые ключи обрабатываются как строки.
$arr = [10 => "десять", "2" => "два", 1 => "один", "a" => "буква"];
ksort($arr, SORT_STRING);
print_r($arr);Array
(
[1] => один
[10] => десять
[2] => два
[a] => буква
)Сортировка с учетом локали, например, для корректного упорядочивания букв конкретного языка.
setlocale(LC_COLLATE, 'ru_RU.UTF-8');
$arr = ["яблоко" => 1, "абрикос" => 2, "банан" => 3];
ksort($arr, SORT_LOCALE_STRING);
print_r($arr);Результат зависит от установленной локали и ее поддержки системой. В корректной русской локали ключи будут отсортированы в порядке «абрикос», «банан», «яблоко».
Ключи сортируются, значения-объекты остаются теми же экземплярами.
class Fruit { public $name; }
$obj1 = new Fruit(); $obj1->name = "Яблоко";
$obj2 = new Fruit(); $obj2->name = "Банан";
$arr = ["z" => $obj2, "a" => $obj1];
ksort($arr);
foreach ($arr as $key => $obj) {
echo $key . ': ' . $obj->name . "\n";
}a: Яблоко z: Банан
Ksort в Python
В Python для сортировки словаря по ключам используют функцию sorted(), возвращающую новый отсортированный список ключей, или метод sort() для списка ключей. Словари сохраняют порядок вставки, начиная с Python 3.7.
my_dict = {"d": "лимон", "a": "апельсин", "b": "банан"}
sorted_dict = {k: my_dict[k] for k in sorted(my_dict.keys())}
print(sorted_dict){'a': 'апельсин', 'b': 'банан', 'd': 'лимон'}Ksort в Javascript
Объекты в JavaScript не гарантируют порядок ключей. Для сортировки ключей можно получить массив ключей, отсортировать его и создать новый объект.
let obj = {d: "лимон", a: "апельсин", b: "банан"};
let sortedKeys = Object.keys(obj).sort();
let sortedObj = {};
sortedKeys.forEach(key => { sortedObj[key] = obj[key]; });
console.log(sortedObj);{ a: 'апельсин', b: 'банан', d: 'лимон' }Ksort в MySQL
В MySQL при выборке данных с помощью ORDER BY происходит сортировка результатов запроса по указанному столбцу. Это не прямая аналогия, а особенность языка запросов.
SELECT * FROM fruits ORDER BY name_key ASC;В отличие от PHP, где ksort изменяет исходный массив, в Python и JavaScript обычно создается новая отсортированная коллекция.