Примеры и функции сортировки массивов в PHP

Массивы - это одна из самых важных структур данных. В PHP, они получили особое внимание, и в языке существует много функций для работы с массивами. Одним из основных видов операций над массивами является сортировка. Именно о ней пойдет речь в этом гайде.

Стандартные функции для сортировки

Стандартные функции сортировки в PHP предоставляют гибкую и мощную систему для упорядочивания данных в массивах. В PHP есть несколько встроенных функций для сортировки массивов, каждая из которых предназначена для разных задач и типов данных.

Функция sort()

Функция sort() в PHP используется для сортировки массива по возрастанию. Она упорядочивает элементы массива в порядке возрастания значений.

$array = array("lemon", "orange", "banana", "apple");
sort($array);
print_r($array);

Array
(
    [0] => apple
    [1] => banana
    [2] => lemon
    [3] => orange
)

Функция rsort()

rsort() является аналогом функции sort(), но сортирует элементы в обратном порядке.

$array = array(1, 10, 2, 20);
rsort($array);
print_r($array);

Array
(
    [0] => 20
    [1] => 10
    [2] => 2
    [3] => 1
)

Функция asort()

Функция asort() сортирует массив по значениям в порядке возрастания, сохраняя связи ключ/значение.

$array = array("f" => "lemon", "b"=>"banana", "a"=>"apple", "d"=>"orange");
asort($array);
print_r($array);

Array
(
    [a] => apple
    [b] => banana
    [f] => lemon
    [d] => orange
)

Функция arsort()

Функция arsort() сортирует массив по значениям в порядке убывания, сохраняя связи ключ/значение.

$array = array("f" => "lemon", "b"=>"banana", "a"=>"apple", "d"=>"orange");
arsort($array);
print_r($array);

Array
(
    [d] => orange
    [f] => lemon
    [b] => banana
    [a] => apple
)

Функция ksort()

Функция ksort() сортирует массив по ключам в порядке возрастания.

$array = array("f" => "lemon", "b"=>"banana", "a"=>"apple", "d"=>"orange");
ksort($array);
print_r($array);

Array
(
    [a] => apple
    [b] => banana
    [d] => orange
    [f] => lemon
)

Функция krsort()

Функция krsort() сортирует массив по ключам в порядке убывания.

$array = array("f" => "lemon", "b"=>"banana", "a"=>"apple", "d"=>"orange");
krsort($array);
print_r($array);

Array
(
    [f] => lemon
    [d] => orange
    [b] => banana
    [a] => apple
)

Функция natsort()

Функция natsort() сортирует массив с использованием "естественного порядка сортировки", как это делает человек.

$array = array("img12.png", "img10.png", "img2.png", "img1.png");
natsort($array);
print_r($array);

Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

Пользовательские функции для сортировки

Стандартные функции сортировки, такие как sort(), asort() или ksort(), удобны для общих задач, но иногда требуется более гибкое решение.

Если вам нужно упорядочить ваши данные по специфичному критерию, который не может быть решен стандартными функциями PHP, вы можете использовать пользовательские функции сортировки.

warning icon

Пользовательские функции сортировки в PHP – это мощный инструмент, который позволяет задавать собственные критерии сортировки массивов.

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

Эта пользовательская функция, задаётся вами, и должна принимать два аргумента для сравнения и возвращать 0, если они равны, отрицательное число, если первый аргумент меньше, и положительное число, если первый аргумент больше.
Основные функции с пользовательским сравнением в PHP - это usort(), uasort() и uksort().

Функция usort()

Функция usort() позволяет сортировать массив по значениям с использованием пользовательской функции сравнения.

$array = array(3, 2, 5, 6, 1);
usort($array, function($a, $b) {
    if ($a == $b) return 0;
    return ($a < $b) ? -1 : 1;
});
print_r($array);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 6
)

Функция uasort()

Функция uasort() - это более гибкая версия функции asort(), которая позволяет нам задать пользовательскую функцию сравнения для сортировки массива.

Допустим, у вас есть ассоциативный массив, и вы хотите его отсортировать по сумме двух элементов 'sub1' и 'sub2' каждого подмассива. Это может быть сделано с помощью uasort() следующим образом:

$assoc = array(
    'b' => array(
        'sub1' => 1,
        'sub2' => 2,
    ),
    'a' => array(
        'sub1' => 5,
        'sub2' => 6,
    ),
);

uasort($assoc, function($a, $b) {
    $sumA = $a['sub1'] + $a['sub2'];
    $sumB = $b['sub1'] + $b['sub2'];
    if ($sumA == $sumB) return 0;
    return ($sumA < $sumB) ? -1 : 1;
});

В этом случае, массив будет отсортирован в порядке возрастания сумм 'sub1' и 'sub2'.

Функция uksort()

Функция uksort() аналогична ksort(), но предоставляет возможность определить пользовательскую функцию сравнения для сортировки массива по ключам.

Например, если вы хотите отсортировать массив по алфавитной части ключа, игнорируя все числовые и специальные символы, вы могли бы это сделать следующим образом:

$assoc = array(
    '123abc' => 1,
    '123.abc' => 2,
    '123.0abc' => 3,
);

uksort($assoc, function($a, $b) {
    $normalizedA = preg_replace('/[^a-zA-Z]/', '', $a);
    $normalizedB = preg_replace('/[^a-zA-Z]/', '', $b);
    return strcmp($normalizedA, $normalizedB);
});

Заключение

В этой статье мы рассмотрели различные функции сортировки в PHP и привели примеры их использования. PHP предоставляет обширные возможности в сортировок, необходимо только уловить основные принципы работы функций, чтобы уверенно применять их в своих проектах.

Оставить комментарий