Bonjour,
Je cherche à trier via la fonction array_multisort un tableau multidimensionnel associatif...
Un dessin valant 10 lignes d'explications, voilà un exemple de ce à quoi ressemble le tableau :
Les données du tableau sont dans un bdd mysql.
Mon but est de pouvoir trier le tableau en fonction de plusieurs critères, en selectionnant le premier en cliquant sur un nom de colonne (Date, Name...)
Mon tableau est créé grâce aux lignes de codes suivantes
Et j'ai essayé d'effectuer le tri de la façon suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 $query1="SELECT Prj.ProjectID as ProjectID,Prj.Name as PrjName,Prj.PrgMgrID as PrgMgrID,Prg.Name as PrgName FROM project Prj, PrgMgr Prg WHERE Prj.Archived='".$Archived."' AND Prj.PrgMgrID=Prg.PrgMgrID"; $result=mysql_query($query1); $i=0; while ($val1 = mysql_fetch_array($result)){ if($val1['ProjectID']!=1){//so as not to show the "undefined" entry $Tab[$i]['ProjectID']=$val1['ProjectID']; $Tab[$i]['Name']=htmlentities($val1['PrjName']); $Tab[$i]['Name']=addslashes($Tab[$i]['Name']); $Tab[$i]['PresentationPath']="none"; $Tab[$i]['PrgMgr']=$val1['PrgName']; $Max=-2; $query3="SELECT Number,SteeringDate,State,PresentationPath FROM phase WHERE ProjectID='".$val1['ProjectID']."';"; $res=mysql_query($query3); if(mysql_numrows($res)!=0){ while ($val3 = mysql_fetch_array($res)){ if($val3['Number']>$Max) { $Max=$val3['Number']; $Tab[$i]['Date']=$val3['SteeringDate']; switch($Max){ case -1 : $Tab[$i]['Phase']="Kick Off"; break; case 0 : $Tab[$i]['Phase']="Phase 0"; break; case 1 : $Tab[$i]['Phase']="Phase 1"; break; case 2 : $Tab[$i]['Phase']="Phase 2"; break; case 3 : $Tab[$i]['Phase']="Phase 3"; break; case 4 : $Tab[$i]['Phase']="Phase 4"; break; default : $Tab[$i]['Phase']="No Phase"; } switch($val3['State']){ case 0 : $Tab[$i]['StateColor']="#f00000";//red break; case 1 : $Tab[$i]['StateColor']="#f4da00";//orange break; case 2 : $Tab[$i]['StateColor']="#f4a100";//yellow break; case 3 : $Tab[$i]['StateColor']="#20c106";//green break; default : $Tab[$i]['StateColor']="#000000";//black } $Tab[$i]['PresentationPath']=$val3['PresentationPath']; } } } else { $Tab[$i]['Date']=" "; $Tab[$i]['Phase']="No Phase"; $Tab[$i]['StateColor']="#000000"; } $i++; } }
Le fait de laisser un crochet vide devant ne marche pas (je veux pas selectionner une ligne mais toutes...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 switch ($Order) { case Name: array_multisort($Tab[]['Name'], SORT_ASC, SORT_STRING); break; case PrgMgr: array_multisort($Tab[]['PrgMgr'], SORT_ASC, SORT_STRING,$Tab[]['Name'], SORT_ASC, SORT_STRING); break; case Phase: array_multisort($Tab[]['Phase'], SORT_ASC, SORT_STRING,$Tab[]['Name'], SORT_ASC, SORT_STRING); break; case Date: array_multisort($Tab[]['Date'], SORT_ASC, SORT_NUMERIC,$Tab[]['Name'], SORT_ASC, SORT_REGULAR); break; default: echo "<div style='position:absolute; left:50%; top:50%; Z-index:10;'>ERROR</div>"; }
Au début je n'avais pas mis les [], et en mettant des noms du style $Tab[ID]
L'erreur renvoyée était :
La ligne 147 correspondant au premier case de mon switch($order) .Après reflexion ça me paraît logique puisque ça ne pointe pas sur la même dimension du tableau $Tab...Warning: array_multisort(): Argument #1 is expected to be an array or a sort flag in D:\ETMDatabase\User\ProjectsTable.php on line 147
J'ai fait des recherches mais je n'ai pas trouvé ce qu'il fallait mettre en les []...
Est-ce que au moins ma solution est viable ? Je suis encore débutant en PHP, alors n'hésitez pas à me le dire si je fais fausse route...
Merci à ceux qui prendront le temps de réfléchir à mon problème
David
Partager