Hello, c'est encore moi !

Je dois trier diverses statistiques selon plusieurs critères et dans un certain ordre donné. J'ai essayé plusieures choses mais c'est moche et le tri est partiellement fait. De facto, je dois bidouiller à la main après chaque traitement.

En fait, j'ai des données sous cette forme suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Produit1, nb1, nb2, nb3, nb4, ratio
Produit2, nb1, nb2, nb3, nb4, ratio
Produit3, nb1, nb2, nb3, nb4, ratio
Je dois afficher l'ensemble des produits de la liste. Le tri doit se faire selon les critères suivants :

- en premier, le ratio en décroissant
- nb1 en décroissant
- nb3 en décroissant
- nb2 en croissant
- nb4 en croissant

Par exemple, pour une liste non ordonnée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
produit1,107,83,3,10,0,563
produit2,107,83,2,5,0,563
produit3,107,83,3,1,0,563
produit4,60,24,0,0,0,714
produit5,80,64,1,0,0,555
Le tri devrait donner ceci (données tabulées pour un affichage + clair) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
                nb1       nb2   nb3    nb4     ratio
produit4	60	24	0	0	0,714
produit3	107	83	3	1	0,563
produit1	107	83	3	10	0,563
produit2	107	83	2	5	0,563
produit5	80	64	1	0	0,555
Ces données sont chargées dans un hash de hash qui a cette forme là :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
my %produit;
 
$produit{produit1}->{nb1} = 107;
$produit{produit1}->{nb2} = 83;
$produit{produit1}->{nb3} = 3;
$produit{produit1}->{nb4} = 10;
$produit{produit1}->{ratio} = 0.563;
 
$produit{produit2}->{nb1} = 107;
$produit{produit2}->{nb2} = 83;
$produit{produit2}->{nb3} = 2;
$produit{produit2}->{nb4} = 5;
$produit{produit2}->{ratio} = 0.563;
En passant par une boucle foreach, qui peut me montrer un sort avancé me permettant de faire ce tri SVP ?

PS : actuellement, mon code est une horreur . J'ai un hash stockant en tant que clés les différents ratios de la liste à traiter. Je fais donc un premier foreach sur les valeurs décroissantes des clés/ratios pour ensuite faire mon tri mais le tri suivant est en bordel couvré, je n'y arrive pas comme je veux.