(PHP 4, PHP 5, PHP 7, PHP 8)
uasort — Сортирует массив пользовательской функцией сравнения, сохраняя ассоциацию индексов
Сортирует массив array пользовательской функцией сравнения так,
чтобы ключи массива сохраняли корреляцию со значениями, с которыми они связаны.
Функцией пользуются для сортировки ассоциативных массивов, для которых важен текущий порядок элементов.
Замечание: Функция сохраняет первоначальный порядок элементов, если при сравнении значения двух элементов равны. До PHP 8.0.0 взаимный порядок одинаковых по значению элементов в отсортированном массиве оставался неопределённым.
Замечание: Функция сбрасывает внутренний указатель массива на первый элемент.
arrayВходной массив.
callback
Функция возвращает логическое значение true .
| Версия | Описание |
|---|---|
| 8.2.0 |
Вместо общего логического типа bool теперь возвращается конкретный тип true .
|
| 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 )
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'));
?>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
)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() ;)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;