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
Как я могу достичь того же.?
Ответы
Ответ 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);