2012-10-09 3 views
3

J'ai un tableau comme ceci:tri du tableau par touches et inverser le résultat

$array = array(
    [1]=>'something', 
    [0.2]=>'something', 
    [0.1]=>'something', 
    [0.3]=>'something', 
    [0.10]=>'something' 
); 

Maintenant, je tiens à trier ce tableau par clé, donc pour que je suis en utilisant ce code:

uksort($array, 'strnatcasecmp'); 

Le code ci-dessus fonctionne bien, mais le seul problème est que je veux inverser le résultat. A cette fin, j'ai utilisé krsort, array_reverse, rsort après uksort, mais tous changent le résultat uksort.

Alors, est-ce que je peux trier ce tableau par clé dans l'ordre naturel et inverser le résultat?

Ce que je veux que devrait être:

$array = array(
    [1]=>'something', 
    [0.10]=>'something', 
    [0.3]=>'something', 
    [0.2]=>'something', 
    [0.1]=>'something' 
); 

Répondre

7

Essayez ceci:

uksort($array, create_function('$a,$b', 'return -strnatcasecmp($a,$b);')); 

Puisque vous utilisez déjà une variante de uksort (tri défini par la fonction de l'utilisateur), cette version inverse juste l'ordre en inversant le résultat de la fonction de comparaison. Je pense que ça devrait marcher pour toi.

Vous pouvez également essayer ceci:

uksort($array, 'strnatcasecmp'); 
$array = array_reverse($array, true); 

Notez le paramètre true, qui préserve vos clés.

+0

votre version de 'uksort' fonctionne correctement. Merci. – kamal

0

asort() va trier par la clé, arsort() va trier par la clé et inverser l'ordre.

0

Pour PHP 4+, vous pouvez utiliser krsort:

krsort($array, SORT_NATURAL | SORT_FLAG_CASE); 

Attend plus simple pour moi, et il fonctionne de la même que strnatcasecmp(). Si vous ne voulez pas qu'il soit sensible à la casse, supprimez le drapeau SORT_FLAG_CASE.