Note that return values between (-1, 1) are being considered as 0.
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
ArrayObject::uasort — Сортировать записи, используя пользовательскую функцию для сравнения элементов и сохраняя при этом связь ключ/значение
Эта функция сортирует значения с сохранением ключей, используя пользовательскую функцию сравнения.
Функция используется в основном при сортировке ассоциативных массивов, в которых важен актуальный порядок элементов.
Замечание:
Функция сохраняет первоначальный порядок элементов, если при сравнении значения двух элементов равны. До PHP 8.0.0 порядок элементов в отсортированном массиве оставался неопределённым.
callback
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим, чем второй.
Возвращение нецелых значений из функции сравнения,
таких как число с плавающей точкой (float), приведёт к внутреннему
приведению возвращаемого значения callback-функции к целому числу (int).
Таким образом, значения 0.99
и 0.1
будут
приведены к целочисленному значению 0
,
что позволит сравнить эти значения как равные.
Функция возвращает логическое значение true
.
Версия | Описание |
---|---|
8.2.0 |
Значение возврата теперь принадлежит типу true ; раньше значение принадлежало типу bool.
|
Пример #1 Пример использования ArrayObject::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);
$arrayObject = new ArrayObject($array);
var_dump($arrayObject);
// Сортировка и вывод массива
$arrayObject->uasort('cmp');
var_dump($arrayObject);
?>
Результат выполнения приведённого примера:
object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(8) { ["a"]=> int(4) ["b"]=> int(8) ["c"]=> int(-1) ["d"]=> int(-9) ["e"]=> int(2) ["f"]=> int(5) ["g"]=> int(3) ["h"]=> int(-4) } } object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(8) { ["d"]=> int(-9) ["h"]=> int(-4) ["c"]=> int(-1) ["e"]=> int(2) ["g"]=> int(3) ["a"]=> int(4) ["f"]=> int(5) ["b"]=> int(8) } }
Note that return values between (-1, 1) are being considered as 0.