Trier un tableau selon une colonne
josse34
Messages postés
93
Date d'inscription
Statut
Membre
Dernière intervention
-
josse34 Messages postés 93 Date d'inscription Statut Membre Dernière intervention -
josse34 Messages postés 93 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je me tue à trier un tableau de plusieurs centaines de lignes dont le code d'encapsulation est :
$tableau[] = array($distance_gps->description, $distance_gps->name, $h);
et voici un extrait en print_r:
Array (
[0] => Array ( [0] => 01033002 [1] => BELLEGARDE [2] => 312.7362 )
[1] => Array ( [0] => 01089001 [1] => AMBERIEU [2] => 286.4661 )
[2] => Array ( [0] => 01185004 [1] => HAUTEVILLE [2] => 294.8129 )
)
je souhaite trier le tableau selon la troisième colonne (312.7362, 286.4661, 294.8129) du plus petit au plus grand et en ressortir les 3 plus petites valeurs associées $tableau[$u][0], $tableau[$u][1] et $tableau[$u][2]
Je n'y arrive pas avec array_multisort ou même du basique php en if :
34154001 - MONTPELLIER - 8.7669
30132004 - LA GRAND COMBE - 76.2123
34337001 - VILLENEUVE-LES-MAG - 16.5258
la première et troisième valeur sont corrects mais pas la seconde qui devrait être 34151005 - MARSILLARGUES - 11.5652. Je n'y comprend rien!!!!
Merci pour votre aide!
je me tue à trier un tableau de plusieurs centaines de lignes dont le code d'encapsulation est :
$tableau[] = array($distance_gps->description, $distance_gps->name, $h);
et voici un extrait en print_r:
Array (
[0] => Array ( [0] => 01033002 [1] => BELLEGARDE [2] => 312.7362 )
[1] => Array ( [0] => 01089001 [1] => AMBERIEU [2] => 286.4661 )
[2] => Array ( [0] => 01185004 [1] => HAUTEVILLE [2] => 294.8129 )
)
je souhaite trier le tableau selon la troisième colonne (312.7362, 286.4661, 294.8129) du plus petit au plus grand et en ressortir les 3 plus petites valeurs associées $tableau[$u][0], $tableau[$u][1] et $tableau[$u][2]
Je n'y arrive pas avec array_multisort ou même du basique php en if :
celui ci m'affiche
$nblignestableau = count ( $tableau );
$u = 0;
$v = 10000;
$w = 10000;
while($u < $nblignestableau){
if($tableau[$u][2] < $v){
$k = $w;
$w = $v;
$v = $tableau[$u][2];
$x1 = $tableau[$u][0];
$y1 = $tableau[$u][1];
$z1 = $tableau[$u][2];
}elseif($tableau[$u][2] < $w){
$k = $w;
$w = $tableau[$u][2];
$x2 = $tableau[$u][0];
$y2 = $tableau[$u][1];
$z2 = $tableau[$u][2];
}elseif($tableau[$u][2] < $k){
$k = $tableau[$u][2];
$x3 = $tableau[$u][0];
$y3 = $tableau[$u][1];
$z3 = $tableau[$u][2];
};
$u = $u + 1;
};
echo "$x1 - $y1 - $z1 <br><br>";
echo "$x2 - $y2 - $z2 <br><br>";
echo "$x3 - $y3 - $z3 <br><br>";
34154001 - MONTPELLIER - 8.7669
30132004 - LA GRAND COMBE - 76.2123
34337001 - VILLENEUVE-LES-MAG - 16.5258
la première et troisième valeur sont corrects mais pas la seconde qui devrait être 34151005 - MARSILLARGUES - 11.5652. Je n'y comprend rien!!!!
Merci pour votre aide!
A voir également:
- Trier un tableau selon une colonne
- Trier un tableau excel - Guide
- Tableau word - Guide
- Déplacer une colonne excel - Guide
- Tableau ascii - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
1 réponse
Pour les prochains, il suffisait de faire cette fonction exemple qui trie en ordre décroissant (il suffit de changer >) :
<?php
$tab = array(array(5,6,2),array(3,7,1),array(1,5,9),array(3,8,8),array(1,2,3),array(7,4,4),array(4,2,10));
usort($tab, "cmp2");
$tab = array_slice($tab, 0, 3);
print_r($tab);
function cmp2($a,$b) {
if ($a[2] == $b[2])
return 0;
return ($a[2] < $b[2]) ? -1 : 1;
}
?>