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);