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 :
<?php
// Fonction d'affichage du contenu du tableau
function print_array($a)
{
for( $i=0;$i<=9;$i++ )
{
echo("[$i][0] => " . $a[$i][0] . " ---- " );
echo("[$i][1] => " . $a[$i][1] . "<BR>\n" );
}
}
// Fonction de comparaison appelée par usort avec 2 élément à comparer.
function cmp($a,$b)
{
if ($a[1] == $b[1]) return 0;
return ($a[1] > $b[1]) ? 1 : -1;
}
// Création d'un tableau de 10 ligne et 2 colonnes
$a = array();
for( $i=0;$i<=9;$i++ )
{
$a[$i][0] = 65 + ( 9 - $i );
$a[$i][1] = chr( 65 + ( 9 -$ i ) );
}
echo( "<HR>Tableau brut<HR>\n" );
print_array($a);
// Tri sur la colonne 2 ( indice 1 ), voir fonction cmp().
usort($a, "cmp" );
echo( "<HR>Tableau tri‚ en ordre croissant<HR>\n" );
print_array($a);
?>
Et voilà le Résultat :
Code :
<HR>Tableau brut<HR>
[0][0] => 74 ---- [0][1] => J<BR>
[1][0] => 73 ---- [1][1] => I<BR>
[2][0] => 72 ---- [2][1] => H<BR>
[3][0] => 71 ---- [3][1] => G<BR>
[4][0] => 70 ---- [4][1] => F<BR>
[5][0] => 69 ---- [5][1] => E<BR>
[6][0] => 68 ---- [6][1] => D<BR>
[7][0] => 67 ---- [7][1] => C<BR>
[8][0] => 66 ---- [8][1] => B<BR>
[9][0] => 65 ---- [9][1] => A<BR>
<HR>Tableau trié en ordre croissant<HR>
[0][0] => 65 ---- [0][1] => A<BR>
[1][0] => 66 ---- [1][1] => B<BR>
[2][0] => 67 ---- [2][1] => C<BR>
[3][0] => 68 ---- [3][1] => D<BR>
[4][0] => 69 ---- [4][1] => E<BR>
[5][0] => 70 ---- [5][1] => F<BR>
[6][0] => 71 ---- [6][1] => G<BR>
[7][0] => 72 ---- [7][1] => H<BR>
[8][0] => 73 ---- [8][1] => I<BR>
[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;
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 :
$nbredonnées $nbredonnées+1 ...
$ligne $data1 $data2
$ligne+1 $data3
$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 :
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??