[PHP] Tableau multidimensionnel

Tableau multidimensionnel [PHP] - Programmation

Marsh Posté le 15-05-2001 à 11:57:20    

Voilà, je remplit un tableau multidimensionnel:
tab est déclaré comme ceci: tab=array();
(je ne sais pas à l'avance combien de colonne il va posséder)
exemple:
tab[0],tab[1]:
35331,2087
35332,793
35333,1146
35334,6425

Ensuite, je veut le trier selon la deuxième colonne:
array_multisort(tab[1],tab[0]);
Mais je reçoit un message comme quoi le paramètre 2 n'est pas un tableau:
Argument 2 to array_multisort() is expected to be an array or a sort flag
Et le tableau n'est pas trié?
Je vois pas en quoi mon exemple diffère de celui de la doc??
 
Si vous avez une idée, je suis preneur!

Reply

Marsh Posté le 15-05-2001 à 11:57:20   

Reply

Marsh Posté le 15-05-2001 à 12:01:56    

? tu devrais pas passer par des variable avant !
 
$x=tab
..
array_mustisort($x,$y)

Reply

Marsh Posté le 15-05-2001 à 12:03:36    

Il est où ton tableau multidimentionnel ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-05-2001 à 12:08:44    

Désolé, voici le code:
 
$tableau=array();
for(...){
$tableau[$ligne][$nbredonnee]=$data;
}
array_multisort($tableau[1],$tableau[0]);

 
Sachant que j'arrive à afficher le contenu :
 
for($i=1;$i<$effectif;$i++){
 echo $tableau[$i][0].",".$tableau[$i][1];
 print("\n" );
}

Reply

Marsh Posté le 15-05-2001 à 12:41:01    

Dans ton cas, $tableau[0] est la première "ligne" du tableau, $tableau[1], la deuxime, etc...
Genre:  

Code :
  1. [0]   [1]
  2. [0]   a     b
  3. [1]   c     d
  4. [2]   e     f
  5. [3]   g     h
  6. [4]   i     j
  7. ...


Essaye plutôt un tableau avec 2 lignes et autant de colonnes que de données :
 

Code :
  1. $tableau=array();
  2. for(...){
  3. $tableau[0][$nbredonnee]=$data_1;
  4. $tableau[1][$nbredonnee]=$data_2;
  5. }


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-05-2001 à 14:08:16    

J'ai besoin d'un tableau à n lignes($ligne) et m colonnes ($nbredonnées).
En fait ma boucle marche comme ça :
 
$tableau[$ligne][$nbredonnées]=$data1;
$tableau[$ligne][$nbredonnées+1]=$data2;
$tableau[$ligne+1][$nbredonnées]=$data3;
$tableau[$ligne+2][$nbredonnées]=$data4;
 
Ce qui donne:
 
       $nbredonnées       $nbredonnées+1   ...
$ligne    $data1             $data2
$ligne+1  $data3             $data4
...
 
Et ensuite je souhaite trier ce tableau en fonction de la colonne $nbredonnées+1.
J'espère que ça éclairçit un peu le pb?

Reply

Marsh Posté le 15-05-2001 à 14:32:05    

S'vous plait...

Reply

Marsh Posté le 15-05-2001 à 14:42:28    

Désolé, mais pour moi :
$tableau[$ligne][$nbredonnées]=$data1;  
$tableau[$ligne][$nbredonnées+1]=$data2;  
$tableau[$ligne+1][$nbredonnées]=$data3;  
$tableau[$ligne+2][$nbredonnées]=$data4;  
 
donne:  

Code :
  1. $nbredonnées       $nbredonnées+1   ...
  2. $ligne    $data1             $data2
  3. $ligne+1  $data3
  4. $ligne+2  $data4


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-05-2001 à 14:57:25    

Mara's dad
J'ai l'impression qu'on est d'accord ou alors il ya un décalage dans ton dernier message, ou alors je ne vois pas la différence?

Reply

Marsh Posté le 15-05-2001 à 15:10:14    

Bon, ben, heu, là je sais pas quoi dire...
Sinon qu'y manque des données dans la colonne $nbredonnées+1...
Sans doute une erreur, mais faut être sûr, quoi ;-)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-05-2001 à 15:10:14   

Reply

Marsh Posté le 15-05-2001 à 15:24:05    

Ha ok, désolé j'avais pas relu mon message et donc pas vu l'erreur, je rectifie:
$tableau[$ligne][$nbredonnées]=$data1;  
$tableau[$ligne][$nbredonnées+1]=$data2;  
$tableau[$ligne+1][$nbredonnées]=$data3;  
$tableau[$ligne+1][$nbredonnées+1]=$data4;  
$tableau[$ligne+2][$nbredonnées]=$data5;  
$tableau[$ligne+2][$nbredonnées+1]=$data6;  
...
$tableau[$ligne+n][$nbredonnées]=$datax;  
$tableau[$ligne+n][$nbredonnées+1]=$datay;  
 
        $nbredonnées        $nbredonnées+1   ....
$ligne    $data1                $data2
$ligne+1  $data3                $data4
$ligne+2  $data5                $data6
...
$ligne+n  $dataX                $dataY
 
Je souhaite garder cette structure car je ne connais pas n à l'avance et il peut aussi y avoir plus de 2 colonnes.
Je souhaite trier sur la colonne $nbredonnées+1?
Merci pour votre aide (surtout Mara's dad) ;)

Reply

Marsh Posté le 15-05-2001 à 16:06:15    

up!

Reply

Marsh Posté le 15-05-2001 à 16:07:09    

Je continue de penser que la fonction array_multisort() n'est pas la solution de ton problème.
Il y a une solution générale pour trier un tableau comme on veut avec usort().
 
Exemple :

Code :
  1. <?php
  2. // Fonction d'affichage du contenu du tableau
  3. function print_array($a)
  4. {
  5.     for( $i=0;$i<=9;$i++ )
  6.     {
  7.         echo("[$i][0] => " . $a[$i][0] . "    ----    " );
  8.         echo("[$i][1] => " . $a[$i][1] . "<BR>\n" );
  9.     }
  10. }
  11. // Fonction de comparaison appelée par usort avec 2 élément à comparer.
  12. function cmp($a,$b)
  13. {
  14.     if ($a[1] == $b[1]) return 0;
  15.     return ($a[1] > $b[1]) ? 1 : -1;
  16. }
  17. // Création d'un tableau de 10 ligne et 2 colonnes
  18. $a = array();
  19. for( $i=0;$i<=9;$i++ )
  20. {
  21.     $a[$i][0] = 65 + ( 9 - $i );
  22.     $a[$i][1] = chr( 65 + ( 9 -$ i ) );
  23. }
  24. echo( "<HR>Tableau brut<HR>\n" );
  25. print_array($a);
  26. // Tri sur la colonne 2 ( indice 1 ), voir fonction cmp().
  27. usort($a, "cmp" );
  28. echo( "<HR>Tableau tri‚ en ordre croissant<HR>\n" );
  29. print_array($a);
  30. ?>


 
Et voilà le Résultat :  
 

Code :
  1. <HR>Tableau brut<HR>
  2. [0][0] => 74    ----    [0][1] => J<BR>
  3. [1][0] => 73    ----    [1][1] => I<BR>
  4. [2][0] => 72    ----    [2][1] => H<BR>
  5. [3][0] => 71    ----    [3][1] => G<BR>
  6. [4][0] => 70    ----    [4][1] => F<BR>
  7. [5][0] => 69    ----    [5][1] => E<BR>
  8. [6][0] => 68    ----    [6][1] => D<BR>
  9. [7][0] => 67    ----    [7][1] => C<BR>
  10. [8][0] => 66    ----    [8][1] => B<BR>
  11. [9][0] => 65    ----    [9][1] => A<BR>
  12. <HR>Tableau trié en ordre croissant<HR>
  13. [0][0] => 65    ----    [0][1] => A<BR>
  14. [1][0] => 66    ----    [1][1] => B<BR>
  15. [2][0] => 67    ----    [2][1] => C<BR>
  16. [3][0] => 68    ----    [3][1] => D<BR>
  17. [4][0] => 69    ----    [4][1] => E<BR>
  18. [5][0] => 70    ----    [5][1] => F<BR>
  19. [6][0] => 71    ----    [6][1] => G<BR>
  20. [7][0] => 72    ----    [7][1] => H<BR>
  21. [8][0] => 73    ----    [8][1] => I<BR>
  22. [9][0] => 74    ----    [9][1] => J<BR>


 
Je pense qu'avec cette méthode, on peut se sortir de toutes les situations !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-05-2001 à 16:41:12    

Merci pour cet exemple, je m'en vais l'essayer.
Je pense par ailleurs que multisort sert à trier des tableaux séparés ou un tableau multidimensionnel (c'est à dire soit par rapport aux lignes, soit par rapport aux colonnes et non pas par rapport à une certaine colonne ou une certaine ligne)
 
Merci je te tiens au courant pour ta solution!

Reply

Marsh Posté le 15-05-2001 à 17:06:20    

Merci, merci, ça marche d'enfer!
 
Vive les forums et vive Mara's dad!
:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed