Aller au contenu

tri tableau multi dimensionnel


Sujets conseillés

Posté

Bonjour,

Je cherche à trier un tableau à 2 dimensions, par un de ses champs :

Ex, j'ai un tableau d'adresses :

nom, adresse, code_postal.

Comment trier par le code postal ?

J'ai binen vu 'sort', mais d'une part on pert la clé, et en plus ça ne marche pas avec les tableau multi-dimensions.

Merci de votre aide.

Posté

Salut Lorik,

En php, il existe la fonction asort() qui te permet de trier un tableau sans perdre les clés.

bool asort ( array &array [, int sort_flags] )

<?php
$fruits = array("d"=>"papaye",
               "a"=>"orange",
               "b"=>"banane",
               "c"=>"ananas");
asort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}
?>

L'exemple ci-dessus va afficher :

fruits[c] = ananas

fruits = banane

fruits[a] = orange

fruits[d] = papaye

Et si tu veux trier suivant les clés, tu as ksort()

Posté

Bonjour,

j'ai trouvé ceci sur la page du manuel commentée de PHP :

<?php
function array_sort($array, $key)
{
  for ($i = 0; $i < sizeof($array); $i++) {
      $sort_values[$i] = $array[$i][$key];
  }
  asort ($sort_values);
  reset ($sort_values);
  while (list ($arr_key, $arr_val) = each ($sort_values)) {
        $sorted_arr[] = $array[$arr_key];
  }
  return $sorted_arr;
}
?>

et celui-ci, à toi de voir la solution qui te convient le mieux :

<?php
function array_sort_multi2($array, $key,$key2)

{
 for ($i = 0; $i < sizeof($array); $i++) {
      if(! empty($array[$i][$key][$key2])){
      $sort_values[$i] = $array[$i][$key][$key2];
      }else{
      $sort_values[$i] = $array[$i];
      }
 }
 asort ($sort_values);
 reset ($sort_values);
 while (list ($arr_keys, $arr_values) = each ($sort_values)) {
        $sorted_arr[] = $array[$arr_keys];
 }
 return $sorted_arr;
}
?>

Posté

Merci à tous,

C'est vrai que j'ai plein de bouquins Php, à priori (trop ?) bons pour mon niveau, et je ne vais voir dans les docs en ligne que quand je connais le nom de la fonction. Il faut que je m'organise mieux, mais je fais ça à la petite semaine, pour le plaisir et sans formation de base... ce qui ne m'autorise pas à vous emm... à tout bout de champs !

Je crois avoir compris le fonctionnement de la fonction, mais j'ai un bug ! php renvoie un Undefined offset: 0 (et 1 et 2) dans le script de test ci dessous. La fonction ne semble pas en cause, c'est semble t il un pb d'initialisation de variable, mais le tableau fautif ($sorted_arr) est déclaré juste avant, alors je cale un peu.

Si vous pouviez jeter un coup d'oeil, ça serait sympa...

Par avance merci.

function array_sort($array, $key) 
{
  for ($i = 0; $i < sizeof($array); $i++)
  {
    $sort_values[$i] = $array[$i][$key];
   }
  asort ($sort_values);
  reset ($sort_values);
  while (list ($arr_key, $arr_val) = each ($sort_values)) {
        $sorted_arr[] = $array[$arr_key];
  }
  return $sorted_arr;
}


    $keyword_table = array();
    $total2        = array();
    $record2 = array();
    $sorted_arr=array();

// je remplis le tableau
      $record2[0] = "conv3";
      $record2[1] = 100;
      $record2[2] = 10;
      array_push($keyword_table,$record2);

      $record2[0] = "conv2";
      $record2[1] = 200;
      $record2[2] = 20;
       array_push($keyword_table,$record2);
   
      $record2[0] = "conv1";
      $record2[1] = 10;
      $record2[2] = 10;
      array_push($keyword_table,$record2);


// je lance la fonction
array_sort($keyword_table, 0); // tri des termes 'conv xx'

// verif du tri (c'est là qu'ça coince !)
$val1=$sorted_arr[0][1];
$val2=$sorted_arr[1][1];
$val3=$sorted_arr[2][1];
echo "<br>".$val1."-".$val2."-".$val3;

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...