Сортировка в естественном порядке
Часть раздела Логика и управление потоком путешествия по 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() изменяет исходный массив напрямую. Это делает её особенно полезной для организации списков файлов, номеров версий или любых данных, где строки содержат встроенные числа, которые должны быть отсортированы по числовому значению, а не по алфавиту.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВы получите один входной параметр: массив номеров версий программного обеспечения в формате 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);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров