Перейти к содержимому

uasort()

Сортировка массивов в PHP с помощью uasort()

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

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

Что такое uasort()?

uasort() — это встроенная функция PHP, которая используется для сортировки массивов пользовательским способом. Она сортирует массив, применяя к каждому его элементу пользовательскую функцию сравнения, при этом сохраняется связь между ключами и значениями. Затем функция переупорядочивает элементы массива на основе результата функции сравнения.

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

Синтаксис uasort()

Синтаксис uasort() выглядит следующим образом:

Синтаксис uasort()

php
uasort(array &$array, callable $comparison_function): bool

Разберём различные части этого синтаксиса:

  • array &$array: это массив, который нужно отсортировать. Символ & перед переменной $array указывает, что это ссылка на исходный массив, а значит, любые изменения, внесённые в отсортированный массив, также отразятся и в исходном массиве.
  • callable $comparison_function: это функция сравнения, которая будет применяться к элементам массива. Функция сравнения должна принимать два аргумента, $a и $b, которые представляют сравниваемые элементы. Функция должна возвращать целое число, которое указывает на соотношение между $a и $b.
  • bool: это тип возвращаемого значения функции uasort(). Она возвращает true в случае успеха и false в случае неудачи.

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

Функция сравнения, используемая в uasort(), должна возвращать целое число, которое указывает на соотношение между двумя значениями. Функция должна принимать два аргумента, $a и $b, которые представляют сравниваемые элементы. Возвращаемое значение должно быть следующим:

  • Если $a больше $b, функция должна вернуть положительное целое число.
  • Если $a равно $b, функция должна вернуть 0.
  • Если $a меньше $b, функция должна вернуть отрицательное целое число.

Примеры использования uasort()

Давайте рассмотрим несколько примеров того, как uasort() можно использовать для сортировки массивов в PHP.

Пример 1: Сортировка простого массива

Предположим, у нас есть следующий массив:

Массив PHP

php
$array = array(3, 1, 4, 1, 5, 9, 2, 6, 5, 3);

Чтобы отсортировать этот массив по возрастанию, мы можем использовать следующую функцию сравнения:

Сортировка массива в PHP

php
function compare($a, $b) {
    return ($a < $b) ? -1 : 1;
}

Затем мы можем вызвать функцию uasort() следующим образом:

Сортировка простого массива с помощью функции uasort()

php
<?php

$array = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3];

function compare($a, $b)
{
    return $a < $b ? -1 : 1;
}

uasort($array, "compare");

print_r($array);

Это отсортирует массив по возрастанию следующим образом:


console
Array
(
    [3] => 1
    [1] => 1
    [6] => 2
    [9] => 3
    [0] => 3
    [2] => 4
    [8] => 5
    [4] => 5
    [7] => 6
    [5] => 9
)

Пример 2: Сортировка ассоциативного массива по значению

Предположим, у нас есть следующий ассоциативный массив:

Ассоциативный массив PHP

php
$array = array(
    "John" => 32,
    "Mary" => 28,
    "Bob" => 45,
    "Jane" => 28,
    "David" => 37
);

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

Сортировка массива в PHP с использованием функции сравнения

php
function compare($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

Затем мы можем вызвать функцию asort() следующим образом:

Сортировка ассоциативного массива по значению с помощью функции uasort() в PHP

php
<?php

$array = [
    "John" => 32,
    "Mary" => 28,
    "Bob" => 45,
    "Jane" => 28,
    "David" => 37,
];

function compare($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return $a < $b ? -1 : 1;
}

uasort($array, "compare");

print_r($array);

Это отсортирует массив по значению по возрастанию следующим образом:


console
array(
    "Mary" => 28,
    "Jane" => 28,
    "John" => 32,
    "David" => 37,
    "Bob" => 45
);

Пример 3: Сортировка многомерного массива по значению

Предположим, у нас есть следующий многомерный массив:

Многомерный массив в PHP

php
<?php

$array = [["John", 32], ["Mary", 28], ["Bob", 45], ["Jane", 28], ["David", 37]];

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

Сортировка массива по второму значению в каждом подмассиве в PHP с использованием функции сравнения

php
function compare($a, $b) {
    if ($a[1] == $b[1]) {
        return 0;
    }
    return ($a[1] < $b[1]) ? -1 : 1;
}

Затем мы можем вызвать функцию uasort() следующим образом:

Пример сортировки многомерного массива по значению в PHP

php
<?php

$array = [["John", 32], ["Mary", 28], ["Bob", 45], ["Jane", 28], ["David", 37]];

function compare($a, $b) {
    if ($a[1] == $b[1]) {
        return 0;
    }
    return ($a[1] < $b[1]) ? -1 : 1;
}

uasort($array, "compare");

print_r($array);

Это отсортирует массив по второму значению в каждом подмассиве по возрастанию следующим образом:


console
Array
(
    [1] => Array
        (
            [0] => Mary
            [1] => 28
        )

    [3] => Array
        (
            [0] => Jane
            [1] => 28
        )

    [0] => Array
        (
            [0] => John
            [1] => 32
        )

    [4] => Array
        (
            [0] => David
            [1] => 37
        )

    [2] => Array
        (
            [0] => Bob
            [1] => 45
        )

)

Заключение

Сортировка массивов — важная задача во многих программных приложениях, и PHP предоставляет мощную функцию для сортировки массивов пользовательским способом. Используя функцию uasort(), вы можете легко сортировать массивы в PHP, а также ассоциативные и многомерные массивы. Понимая синтаксис и параметры этой функции, вы сможете использовать её возможности для эффективной сортировки данных в ваших PHP-приложениях.

Практика

Какова цель функции uasort() в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.