Page 1 sur 1

Problème tri tableau contenant des valeurs numériques

Posté : 01 nov. 2008, 14:28
par supercanard
Bonjour,

J'essaye en vain de trier un tableau contenant des valeurs numériques.

Je converti donc mon string en entier avant d'insérer les valeurs dans le tableau au cas ou
Ensuite j'ai essayé de faire un tri avec sort en utilisant le sort_flag SORT_NUMERIC
Mais ça ne donne rien.
De plus ce ne sont pas par rapport au clé que je veut faire le tri mais sur la valeur, tout en conservant les clés.

Voici mon tableau :

Array ( [2] => Array ( [valeur] => 4 )
[1] => Array ( [valeur] => 1 )
[3] => Array ( [valeur] => 2 ) )

Je voudrais donc que l'ordre soit clé 2, clé 3 et clé 1

Auriez-vous une piste ?

Posté : 01 nov. 2008, 14:36
par Ryle
La fonction sort() permet de trier le contenu d'un tableau à une dimension. Elle va simplement réordonner les valeurs. Ce que tu cherches à faire ici est un tri de tableau multidimentionnel (un tableau de tableau en fait), ce n'est donc pas la méthode aproprié. Regarde du côté de array_multisort() ;)

Posté : 01 nov. 2008, 16:00
par supercanard
Oulà encore une fonction que j'ai jamais utilisée.

D'après ce que j'ai compris et un exemple en particulier je ferrais ceci qui me retourne bien sur une erreur. Je dois nager à coté de la plaque par déduction :D :
array_multisort(SORT_DESC, $tabPertinence['valeur'], $tabPertinence);

Posté : 01 nov. 2008, 17:54
par Ryle
Hum.... je pensais pas avoir besoin de le préciser, mais les fonctions s'attendent à ce qu'on leur envoie des paramètres dans le même ordre que celui spécifié dans leur doc... si tu les mélanges ou que tu en rajoutes, ça va forcément marcher beaucoup moins bien ;)

Apprenons à lire la signature des fonctions :
bool array_multisort ( array $arr [, mixed $arg [, mixed $... ]] )
1. Le type : c'est le type de donnée que va retourner la fonction. Ici bool pour booléen, on s'attend donc à récupérer TRUE ou FALSE après le traitement.
2. Le nom : array_multisort, c'est le nom de la fonction. simple, basique, facile à retenir (ou presque ;))
3. Entre parenthèse : Les paramètres
- array $arr : premier paramètre, un array. On doit donc lui passer un tableau en premier argument, en l'occurence ici, c'est le tableau que tu veux trier. C'est obligatoire, c'est comme ça et pis c'est tout.
- [, mixed $arg : y a des crochets, donc ce paramètre est facultatif. mixed : plusieurs types peuvent être passés : un autre tableau ou une option de tri, voir la liste dans la doc)
- [, mixed $... ]] : y a encore des crochets, donc 3ème paramètre et suivants sont facultatifs. La encore, en fonction des paramètres précédents, tu peux spécifier des tableaux ou des options. Les 3 p'tits points indiquent que t'es pas limités dans le nombre de paramètres à envoyer.

Vala. A partir de maintenant je ne tolèrerais plus aucune erreur dans l'ordre des paramètes lorsque tu as la doc sous la main, sans quoi tu passeras 15min à genoux sur une règle en bois ! nan mais :P

Posté : 01 nov. 2008, 18:22
par supercanard
Complètement d accord... je sais pas dans quoi je m'étais embarqué mais comme ça ne marchais pas je suis parti dans tous les sens.

Mais en fait ça ne marchais pas car j'avais oublié de lire ça : Les clés associatives (chaîne de caractères) seront maintenues, mais les clés numériques seront réindexées.
Les clés associatives (chaîne de caractères) seront maintenues, mais les clés numériques seront réindexées.

Le hic c'est que mes clés sont numériques. Ce sont en fait les clés de ma table sql.
Donc j'ai essayer le tout pour le tout :
$id = (string) $data['id'];
			$tabTitre[$id]['titre'] = $data['titre'];
Sinon donc pour le tri ça marche,
array_multisort( $tabPertinence, SORT_DESC );
Je suis totalement foutu au niveau de la réindexation des clés ?