Trier par valeurs décroissantes sur clé dans un tableau.

Eléphant du PHP | 172 Messages

11 mars 2006, 16:38

Bonjour à tous !!

Je suis de nouveau confronté à un petit problème que je ne sais comment résoudre...

Par l'intermédiaire d'un petit sondage, j'enregistre les votes dans une table, je récupère les résultats pour les afficher sous formes d'images sur ma page, je souhaite classer les résultats par ordre décroissant sur mon image.

J'ai donc fait un array avec une association clé, valeur :
$votes = array($tt_pour => 'Pour', $tt_contre => 'Contre', $tt_neutre => 'Neutre');
Les clés représentent des numériques (pourcentage par rapport au total), j'ai utilisé des valeurs pour garder une relation après le classement décroissant.

Il faut donc que je classe seulement les clés de la plus grande à la plus petite, j'ai donc fait :
$votes = ksort($votes, SORT_NUMERIC);
print_r($votes);
Mais ça ne fonctionne pas :?
J'obtiens avec le print_r la valeur de 1.

Je ne comprends pas...

Eléphanteau du PHP | 13 Messages

11 mars 2006, 16:52

C'est normal ksort() te retourne true donc ca revient à ca

$votes = true;

d'ou ton 1

tu dois procéder comme ca

Code : Tout sélectionner

$votes = array($tt_pour => 'Pour', $tt_contre => 'Contre', $tt_neutre => 'Neutre'); ksort($votes, SORT_NUMERIC); print_r($votes);

Eléphant du PHP | 172 Messages

11 mars 2006, 17:06

Merci, ça fonctionne :P

Mais j'ai pas compris la subtilité de la chose.

Pourquoi
$votes_dec = krsort($votes, SORT_NUMERIC);
Retourne true, alors que
$new = $votes;
Affectes bien le tableau de $votes à $new ?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

11 mars 2006, 17:21

Tout dépend de la valeur de retour. Une variable renvoit sa propre valeur, donc dans $a = $b la valeur de $b est affectée à $a. Pour les fonctions, ça dépend de chaque fonction. Généralement, les fonctions renvoient un résultat mais ksort() et les autres sort() sont un peu des exceptions à la règles. Au lieu de renvoyer leur résultat, ils modifient directement les variables qu'on leur passe (on appelle ça passer "par référence") et ils renvoient TRUE ou FALSE selon s'ils se sont exécuté correctement ou non.

Je te rassure, ce genre de fonctions est relativement rare dans PHP, et même moi je me fais encore avoir de temps à autres. La morale de l'histoire: il faut toujours regarder dans le manuel pour savoir ce que retourne une fonction.

Eléphant du PHP | 172 Messages

11 mars 2006, 17:31

Merci de ton explication, c'est un peu plus clair maintenant.

:wink: