usort descending
Solution 1
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 >
)
Solution 2
Just switch the $a and $b around as follows;
function sort($a, $b){
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");
Solution 3
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'];
});
Solution 4
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");
Solution 5
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);
Related videos on Youtube
000
Updated on March 27, 2021Comments
-
000 about 3 years
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.?
-
Admin about 11 yearsBy swapping "a" and "b". Something else is wrong here.
-
000 about 11 yearsthat something i am unable to find..
-
Admin about 11 yearsmaybe some of the elements are stored as strings. Try casting to some numeric type.
-
-
Barmar about 11 yearsPHP needs a
signum()
function. BASIC had this function over 40 years ago.