lorik Posté 25 Septembre 2005 Partager Posté 25 Septembre 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 25 Septembre 2005 Partager Posté 25 Septembre 2005 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() Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorik Posté 25 Septembre 2005 Auteur Partager Posté 25 Septembre 2005 Merci Dan, c'est donc ok pour les clés, mais pour les multi dimensions ? A+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 26 Septembre 2005 Partager Posté 26 Septembre 2005 Salut, Pour creuser le tri de tableaux multi-dimensionnels il y a la fonction usort. Fonctionnement a découvrir là : http://www.nexen.net/docs/php/annotee/function.usort.php Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 26 Septembre 2005 Partager Posté 26 Septembre 2005 Bonjour, j'ai trouvé ceci sur la page du manuel commentée de PHP : <?phpfunction 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 : <?phpfunction 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;}?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorik Posté 26 Septembre 2005 Auteur Partager Posté 26 Septembre 2005 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 fonctionarray_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; Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant