When i try to apply the below code from here

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

it gives me results in ascending order.

Output:

0
0
0
0
0
0.29
1.09
6.33

On swapping $a and $b it gives the results in descending order except one value

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

Output:

6.33
1.09
0
0
0
0
0.29
0

i want to have the results in the below order:

6.33
1.09
0.29
0
0
0
0
0

How do i achieve the same.?

有帮助吗?

解决方案

My first guess is that usort expects an integer response, and will round off your return values if they are not integers. In the case of 0.29, when it is compared to 0, the result is 0.29 (or -0.29), which rounds off to 0. For usort, 0 means the two values are equal.

Try something like this instead:

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

(I think that's the correct direction. To reverse the order, change the < to >)

其他提示

Just switch the $a and $b around as follows;

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

using the space ship operator in php 7 (and over):

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

would return the array sorted in ascending order. reversing the comparison will return it in descending.

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

I know this is old, but hopefully this helps someone. Easiest way to set descending order, is to just multiply by negative one (-1) as shown below. Worked well for me, with text.

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

usort($results,"DESC");

You can also simply reverse the array once it has been sorted.

Starting the same way you did:

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

and then reversing the results like this:

$myArray = array_reverse($myArray);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top