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
)

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