Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3609 connectés 

 


Dernière réponse
Sujet : [PHP] Tableau multidimensionnel
shinji Merci, merci, ça marche d'enfer!
 
Vive les forums et vive Mara's dad!
:)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
shinji Merci, merci, ça marche d'enfer!
 
Vive les forums et vive Mara's dad!
:)
shinji 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!
Mara's dad 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 !

shinji up!
shinji 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) ;)
Mara's dad 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 ;-)
shinji 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?
Mara's dad 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

shinji S'vous plait...
shinji 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?
Mara's dad 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. }

shinji 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" );
}
Mara's dad Il est où ton tableau multidimentionnel ?
lamatrice ? tu devrais pas passer par des variable avant !
 
$x=tab
..
array_mustisort($x,$y)
shinji 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!

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)