Menu
Coddy logo textTech

Сортировка в естественном порядке

Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 24 из 68.

Хотя стандартные функции сортировки PHP хорошо работают в большинстве случаев, они могут давать неожиданные результаты при сортировке строк, содержащих числа. Функция natsort() решает эту проблему, используя алгоритм «естественной сортировки», который сортирует строки так, как этого ожидал бы человек.

Рассмотрим этот пример с именами файлов:

<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// Обычная функция sort() выдает: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);

// Сброс массива
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// natsort() выдает: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>

Разница принципиальна: обычная функция sort() сравнивает строки посимвольно, поэтому "file10.txt" идет перед "file2.txt", так как "1" идет перед "2" в ASCII. Однако natsort() распознает числовые части и сортирует их как числа, располагая "file2.txt" перед "file10.txt", как вы и ожидали бы.

Как и другие функции сортировки PHP, natsort() изменяет исходный массив напрямую. Это делает её особенно полезной для организации списков файлов, номеров версий или любых данных, где строки содержат встроенные числа, которые должны быть отсортированы по числовому значению, а не по алфавиту.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

challenge icon

Задание

Легко

Вы получите один входной параметр: массив номеров версий программного обеспечения в формате JSON. Прочитайте входные данные, преобразуйте строку JSON в массив, используйте natsort() для сортировки номеров версий в естественном порядке и выведите отсортированный массив с помощью print_r().

Формат входных данных: Одна строка, содержащая JSON-массив строк версий (например: ["v1.10","v1.2","v1.20","v1.3"])

Ожидаемый результат: Отсортированный массив в естественном порядке, отображаемый с помощью print_r()

Шпаргалка

Функция natsort() сортирует строки, используя «натуральный порядок» — так, как люди обычно ожидают сортировки строк с числами.

Обычная функция sort() сравнивает строки посимвольно, в то время как natsort() распознает числовые части и сортирует их как числа:

$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// Обычная sort() выдает: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);

// natsort() выдает: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);

Как и другие функции сортировки в PHP, natsort() изменяет исходный массив напрямую. Она особенно полезна для списков файлов, номеров версий или любых данных со встроенными числами, которые должны быть отсортированы по числовому значению.

Попробуйте сами

<?php
// Чтение входных данных
$input = fgets(STDIN);

// Преобразование строки JSON в массив
$versions = (array)json_decode($input, true);

// TODO: Напишите ниже свой код для сортировки массива с помощью natsort()


// Вывод отсортированного массива
print_r($versions);
?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком