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

  FORUM HardWare.fr
  Programmation

  [PHP] Tableau multidimensionnel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Tableau multidimensionnel

n°31774
shinji
Posté le 15-05-2001 à 11:57:20  profilanswer
 

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!

mood
Publicité
Posté le 15-05-2001 à 11:57:20  profilanswer
 

n°31776
lamatrice
Posté le 15-05-2001 à 12:01:56  profilanswer
 

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

n°31778
Mara's dad
Yes I can !
Posté le 15-05-2001 à 12:03:36  profilanswer
 

Il est où ton tableau multidimentionnel ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°31785
shinji
Posté le 15-05-2001 à 12:08:44  profilanswer
 

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" );
}

n°31806
Mara's dad
Yes I can !
Posté le 15-05-2001 à 12:41:01  profilanswer
 

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é.
n°31838
shinji
Posté le 15-05-2001 à 14:08:16  profilanswer
 

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?

n°31846
shinji
Posté le 15-05-2001 à 14:32:05  profilanswer
 

S'vous plait...

n°31854
Mara's dad
Yes I can !
Posté le 15-05-2001 à 14:42:28  profilanswer
 

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é.
n°31860
shinji
Posté le 15-05-2001 à 14:57:25  profilanswer
 

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?

n°31867
Mara's dad
Yes I can !
Posté le 15-05-2001 à 15:10:14  profilanswer
 

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é.
mood
Publicité
Posté le 15-05-2001 à 15:10:14  profilanswer
 

n°31872
shinji
Posté le 15-05-2001 à 15:24:05  profilanswer
 

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) ;)

n°31891
shinji
Posté le 15-05-2001 à 16:06:15  profilanswer
 

up!

n°31892
Mara's dad
Yes I can !
Posté le 15-05-2001 à 16:07:09  profilanswer
 

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é.
n°31905
shinji
Posté le 15-05-2001 à 16:41:12  profilanswer
 

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!

n°31914
shinji
Posté le 15-05-2001 à 17:06:20  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [PHP] Tableau multidimensionnel

 

Sujets relatifs
[ Shell ] tableau ?[PHP] easy php et win me = ca marche?
VB : tableau dynamique--- [MySql/Php] --- Colonne et donnee !!!!!
[PHP/PERL/CGI] IRCUtiliser des fichiers INI en PHP
[PHP] PHPBB1.4 : Problème de Log ( cookie ) !!librairie GD PHP
[PHP] include m'affiche le fichier à l'écran?[PHP] tableaux, multiselection et mise à jour de table MySQL
Plus de sujets relatifs à : [PHP] Tableau multidimensionnel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR