Page 1 sur 1

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

Posté : 11 mars 2006, 16:38
par spirou
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...

Posté : 11 mars 2006, 16:52
par manmachine
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);

Posté : 11 mars 2006, 17:06
par spirou
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 ?

Posté : 11 mars 2006, 17:21
par Hubert Roksor
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.

Posté : 11 mars 2006, 17:31
par spirou
Merci de ton explication, c'est un peu plus clair maintenant.

:wink: