it-swarm.com.ru

усорт по убыванию

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

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

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

16
000

Мое первое предположение состоит в том, что 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;
});

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

36
Gareth Cornish

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

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

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

Начиная так же, как вы это сделали:

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

а затем поменять местами результаты, как это:

$myArray = array_reverse($myArray);
0
Frits

Я знаю, что это старо, но, надеюсь, это кому-то поможет. Самый простой способ установить нисходящий порядок - просто умножить на отрицательный (-1), как показано ниже. Хорошо сработало для меня, с текстом.

function DESC($a, $b)
{
    return strcmp($a["text"], $b["text"])*-1;
}

usort($results,"DESC");
0
Jimmy B.