Trier un tableau selon une colonne

josse34 Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   -  
josse34 Messages postés 47 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 :

$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>";
celui ci m'affiche

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!

1 réponse

  1. josse34 Messages postés 47 Date d'inscription   Statut Membre Dernière intervention  
     
    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;
    }
    ?>
    0