Trier un tableau selon une colonne

Fermé
josse34 Messages postés 58 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 22 septembre 2024 - Modifié par josse34 le 26/10/2013 à 12:55
josse34 Messages postés 58 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 22 septembre 2024 - 26 oct. 2013 à 15:55
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!
A voir également:

1 réponse

josse34 Messages postés 58 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 22 septembre 2024
26 oct. 2013 à 15:55
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