PHP 8.4.2 Released!

uasort

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

uasortСортирует массив пользовательской функцией сравнения, сохраняя ассоциацию индексов

Описание

uasort(array &$array, callable $callback): true

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

Функцией пользуются для сортировки ассоциативных массивов, для которых важен текущий порядок элементов.

Замечание:

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

Замечание:

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

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

array

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

callback

Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим, чем второй.

callback(mixed $a, mixed $b): int
Предостережение

Возвращение нецелых значений из функции сравнения, таких как число с плавающей точкой (float), приведёт к внутреннему приведению возвращаемого значения callback-функции к целому числу (int). Таким образом, значения 0.99 и 0.1 будут приведены к целочисленному значению 0, что позволит сравнить эти значения как равные.

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

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

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

Версия Описание
8.2.0 Значение возврата теперь принадлежит типу true; раньше значение принадлежало типу bool.
8.0.0 Теперь функция выдаст ошибку уровня E_WARNING, если параметр callback ожидает, что значение передадут по ссылке.

Примеры

Пример #1 Простой пример использования функции uasort()

<?php

// Функция сравнения
function cmp($a, $b) {
if (
$a == $b) {
return
0;
}
return (
$a < $b) ? -1 : 1;
}

// Сортируемый массив
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);

// Сортируем и выводим получившийся массив
uasort($array, 'cmp');
print_r($array);
?>

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

Array
(
    [a] => 4
    [b] => 8
    [c] => -1
    [d] => -9
    [e] => 2
    [f] => 5
    [g] => 3
    [h] => -4
)
Array
(
    [d] => -9
    [h] => -4
    [c] => -1
    [e] => 2
    [g] => 3
    [a] => 4
    [f] => 5
    [b] => 8
)

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

Добавить

Примечания пользователей 4 notes

up
152
magikMaker
14 years ago
a quick reminder on the syntax if you want to use uasort in a Class or Object:

<?php

// procedural:
uasort($collection, 'my_sort_function');

// Object Oriented
uasort($collection, array($this, 'mySortMethod'));

// Objet Oriented with static method
uasort($collection, array('self', 'myStaticSortMethod'));

?>
up
34
yannick dot battail at gmail dot com
14 years ago
An Example using anonymous function.
Anonymous functions make some time the code easier to understand.
<?php
$fruits
= array('Orange9','Orange11','Orange10','Orange6','Orange15');
uasort ( $fruits , function ($a, $b) {
return
strnatcmp($a,$b); // or other function/code
}
);
print_r($fruits);
?>
returns
Array
(
[3] => Orange6
[0] => Orange9
[2] => Orange10
[1] => Orange11
[4] => Orange15
)
up
5
php at eden2 dot com
21 years ago
Is it just me, or are the examples below misleading, and actually demonstrating situations that would be more appropriate for usort()?

After trying to make sense of the uasort() description, it sounds like it's more for sorting a 1D array like this:

"john" => "$23.12"
"tim" => "$6.50"
"bob" => "$18.54"

and getting back:

"tim" => "$6.50"
"bob" => "$18.54"
"john" => $23.12"

(assuming, of course, that your sort function is lopping off the $ and evaluating as a number -- which would complicate the use of asort() ;)
up
0
raveren at gmail dot com
3 days ago
Since php7.0 you can replace this boilerplate

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

with the spaceship operator:
https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op

return $a <=> $b;
To Top