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() изменяет исходный массив напрямую. Это делает её особенно полезной для организации списков файлов, номеров версий или любых данных, где строки содержат встроенные числа, которые должны быть отсортированы по числовому значению, а не по алфавиту.

challenge icon

Задание

Легко

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

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

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

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

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

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

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


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

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

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