sort multidimensional manually desc attribute array php arrays sorting multidimensional-array usort

multidimensional - usort desc php



usort descendente (4)

Mi primera suposición es que usort espera una respuesta de entero, y redondeará sus valores de retorno si no son enteros. En el caso de 0.29, cuando se compara con 0, el resultado es 0.29 (o -0.29), que se redondea a 0. Para usort, 0 significa que los dos valores son iguales.

Intenta algo como esto en su lugar:

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

(Creo que es la dirección correcta. Para invertir el orden, cambie < )

Cuando intento aplicar el siguiente código desde aquí

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

Me da resultados en orden ascendente.

Salida :

0 0 0 0 0 0.29 1.09 6.33

Al intercambiar $ ay $ b, da los resultados en orden descendente, excepto un valor

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

Salida :

6.33 1.09 0 0 0 0 0.29 0

Quiero tener los resultados en el siguiente orden:

6.33 1.09 0.29 0 0 0 0 0

¿Cómo logro lo mismo?


Sé que esto es viejo, pero espero que esto ayude a alguien. La forma más fácil de establecer un orden descendente es multiplicar por uno negativo (-1) como se muestra a continuación. Funcionó bien para mí, con texto.

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


Simplemente cambia los $ ay $ b de la siguiente manera;

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


También puede simplemente revertir la matriz una vez que se ha ordenado.

Comenzando de la misma manera que lo hiciste:

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

y luego revertir los resultados de esta manera:

$myArray = array_reverse($myArray);