lorik Posté 25 Septembre 2005 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.
Dan Posté 25 Septembre 2005 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()
lorik Posté 25 Septembre 2005 Auteur Posté 25 Septembre 2005 Merci Dan, c'est donc ok pour les clés, mais pour les multi dimensions ? A+
NorSeb Posté 26 Septembre 2005 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
TheRec Posté 26 Septembre 2005 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;}?>
lorik Posté 26 Septembre 2005 Auteur 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;
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant