Tri d'un array

Résolu
Signaler
Messages postés
39
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
18 février 2008
-
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
-
Bonjour,
j'ai un array qui a cette forme :

$variable[0]=(1134, 10, 100, 56)
$variable[1]=(1115, 10, 101, 312)
$variable[2]=(25, 8, 100, 75)
$variable[3]=(38, 9, 99, 45)
$variable[4]=(88, 9, 100, 50)

Je veux trier $variable selon $variable[n][1] croissant et $variable[n][2] croissant...

J'ai essayer avec "multisort", "sort" avec un fonction, mais c'est à n'y rien comprendre.


Au secours !!!!!!!!

Quelqu'un peut m'aider ?


Tartuffe, PekLandais

5 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
regarde http://ch2.php.net/manual/fr/function.array-multisort.php, tu
comprendras pourquoi ça marche ;o) .. en supposant que j'ai bien
compris ce que tu veux!



Ce bout de code vas reclasser l'ordre des tableaux en fonction du premier élément de chaque tableau...

AVANT:


$variable[0]=array(1134, 10, 100, 56);

$variable[1]=array(1115, 10, 101, 312);

$variable[2]=array(25, 8, 100, 75);

$variable[3]=array(38, 9, 99, 45);

$variable[4]=array(88, 9, 100, 50);



APRES:



$variable[4]=array(1134, 10, 100, 56);

$variable[3]=array(1115, 10, 101, 312);

$variable[0]=array(25, 8, 100, 75);

$variable[1]=array(38, 9, 99, 45);

$variable[2]=array(88, 9, 100, 50);



Si tu voulais classer en fonction du deuxième élément, il faut faire
$tri[$i] = $variable[$i][1], 3e => $tri[$i] = $variable[$i][2], etc...



Je n'ai pas mis {} avec le for, mais tu peux les rajouter. Lorsqu'on ne met pas {}, le for ne prend que la ligne qui suit ($tri[$i] = $variable[$i][0] dans ce cas)



On y est?
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
J'suis pas sûr sûr d'avoir compris la question, mais je me lance ;o)



<?php

$variable[0]=array(1134, 10, 100, 56);

$variable[1]=array(1115, 10, 101, 312);

$variable[2]=array(25, 8, 100, 75);

$variable[3]=array(38, 9, 99, 45);

$variable[4]=array(88, 9, 100, 50);



for ($i=0;$i<count($variable);$i++){

sort($variable[$i]);

}



print_r($variable);

?>



donne: Array
(
[0] => Array
(
[0] => 10
[1] => 56
[2] => 100
[3] => 1134
)

[1] => Array
(
[0] => 10
[1] => 101
[2] => 312
[3] => 1115
)

[2] => Array
(
[0] => 8
[1] => 25
[2] => 75
[3] => 100
)

[3] => Array
(
[0] => 9
[1] => 38
[2] => 45
[3] => 99
)

[4] => Array
(
[0] => 9
[1] => 50
[2] => 88
[3] => 100
)

)
Messages postés
39
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
18 février 2008
3
Ma question doit être de travers...

Ce que je veux pourvoir trier c'est les "colonnes" [1] et [2] de $variable[0], pas trier chaque $variable[0][x].
Je veux changer l'indice de $variable selon les valeurs de [1] et [2] de chaque array contenu par $variable.

En fait partant de :
$variable[0]=array(1134, 10, 100, 56);
$variable[1]=array(1115, 10, 101, 312);
$variable[2]=array(25, 8, 100, 75);
$variable[3]=array(38, 9, 99, 45);
$variable[4]=array(88, 9, 100, 50);

... le résultat attendu c'est ca :

$variable[0]=array(25, 8, 100, 75);
$variable[1]=array(38, 9, 99, 45);
$variable[2]=array(88, 9, 100, 50);
$variable[3]=array(1134, 10, 100, 56);
$variable[4]=array(1115, 10, 101, 312);


arno
PekLandais
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
<?php

$variable[0]=array(1134, 10, 100, 56);

$variable[1]=array(1115, 10, 101, 312);

$variable[2]=array(25, 8, 100, 75);

$variable[3]=array(38, 9, 99, 45);

$variable[4]=array(88, 9, 100, 50);



for ($i=0;$i<count($variable);$i++)

$tri[$i] = $variable[$i][0] ;



array_multisort ($variable, $tri);

print_r($variable);

?>



Ca donne: Array
(
[0] => Array
(
[0] => 25
[1] => 8
[2] => 100
[3] => 75
)

[1] => Array
(
[0] => 38
[1] => 9
[2] => 99
[3] => 45
)

[2] => Array
(
[0] => 88
[1] => 9
[2] => 100
[3] => 50
)

[3] => Array
(
[0] => 1115
[1] => 10
[2] => 101
[3] => 312
)

[4] => Array
(
[0] => 1134
[1] => 10
[2] => 100
[3] => 56
)

)
Messages postés
39
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
18 février 2008
3
Bon, bé je suis pas certain de capter pourquoi ca marche, mais bon...
Par exemple pour $variable[$i][0] alors qu'on vise $variable[$i][1] et $variable[$i][2].
Bon j'essaye tout de même.

Question {}, je supose que { est après le for (), et } après array_mutlisort(), non ?

Arno
PekLandais