Подтвердить что ты не робот

Usort по убыванию

Когда я попытаюсь применить приведенный ниже код отсюда

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

он дает мне результаты в порядке возрастания.

Выход

0
0
0
0
0
0.29
1.09
6.33

При замене $a и $b он дает результаты в порядке убывания, за исключением одного значения

usort($myArray, function($a, $b) {
    return $b['order'] - $a['order'];
});

Выход

6.33
1.09
0
0
0
0
0.29
0

Я хочу получить результаты в следующем порядке:

6.33
1.09
0.29
0
0
0
0
0

Как я могу достичь того же.?

4b9b3361

Ответ 1

Мое первое предположение заключается в том, что usort ожидает целочисленный ответ и округляет ваши возвращаемые значения, если они не являются целыми числами. В случае 0,29, когда он сравнивается с 0, результат равен 0,29 (или -0,29), который округляется до 0. Для usort 0 означает, что два значения равны.

Попробуйте что-то вроде этого:

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

(Я думаю, что правильное направление. Чтобы изменить порядок, измените < на >)

Ответ 2

Просто переключите $a и $b следующим образом:

function sort($a, $b){ 
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");

Ответ 3

Вы также можете просто изменить массив после его сортировки.

Запуск так же, как и вы:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

а затем измените результаты следующим образом:

$myArray = array_reverse($myArray);