natsort

(PHP 4, PHP 5, PHP 7, PHP 8)

natsortСортирует массив, для чего использует алгоритм «естественной сортировки»

Описание

natsort(array &$array): true

Эта функция использует алгоритм сортировки, который упорядочивает буквенно-цифровые строки так, как это сделал бы человек. При этом функция сохраняет связи между ключами и значениями. Такой алгоритм называется natural ordering. Пример ниже показывает различия между этим алгоритмом и обычными компьютерными алгоритмами сортировки строк, которые использует функция sort().

Замечание:

Функция сохраняет первоначальный порядок элементов, если при сравнении значения двух элементов равны. До PHP 8.0.0 порядок элементов в отсортированном массиве оставался неопределённым.

Замечание:

Функция сбрасывает внутренний указатель массива на первый элемент.

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

array

Входной массив.

Возвращаемые значения

Функция возвращает логическое значение true.

Список изменений

Версия Описание
8.2.0 Значение возврата теперь принадлежит типу true; раньше значение принадлежало типу bool.

Примеры

Пример #1 Простой пример использования natsort()

<?php

$array1
= $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");

asort($array1);
echo
"Обычная сортировка\n";
print_r($array1);

natsort($array2);
echo
"\nСортировка natural order\n";
print_r($array2);

?>

Результат выполнения приведённого примера:

Обычная сортировка
Array
(
    [3] => img1.png
    [1] => img10.png
    [0] => img12.png
    [2] => img2.png
)

Сортировка natural order
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

Подробнее об алгоритме рассказывает страница Martin Pool » Natural Order String Comparison.

Пример #2 Примеры показывают ошибки, которые возникают при использовании функции natsort()

<?php

echo "Отрицательные числа\n";
$negative = array('-5','3','-2','0','-1000','9','1');
print_r($negative);
natsort($negative);
print_r($negative);

echo
"Отбивка нулями\n";
$zeros = array('09', '8', '10', '009', '011', '0');
print_r($zeros);
natsort($zeros);
print_r($zeros);

?>

Результат выполнения приведённого примера:

Отрицательные числа
Array
(
    [0] => -5
    [1] => 3
    [2] => -2
    [3] => 0
    [4] => -1000
    [5] => 9
    [6] => 1
)
Array
(
    [2] => -2
    [0] => -5
    [4] => -1000
    [3] => 0
    [6] => 1
    [1] => 3
    [5] => 9
)

Отбивка нулями
Array
(
    [0] => 09
    [1] => 8
    [2] => 10
    [3] => 009
    [4] => 011
    [5] => 0
)
Array
(
    [5] => 0
    [1] => 8
    [3] => 009
    [0] => 09
    [2] => 10
    [4] => 011
)

Смотрите также