Trier un tableau

Eléphanteau du PHP | 11 Messages

17 mars 2010, 16:13

Bonjour
Je sollicite une nouvelle fois votre aide.
Je récupère les mots contenus dans le champ etiquettes de la table articles et je compte les occurences de chaque mot pour réaliser un nuage de tags. J'ai écrit le script suivant:

Code : Tout sélectionner

<?php require 'admin/includes/connexion.php'; $nuage=""; $sql = mysql_query('SELECT etiquettes FROM articles') or die(); while ($rang = mysql_fetch_assoc($sql)) { $nuage=$nuage.",".$rang['etiquettes']; } $nuage=substr($nuage, 1); $nuage = explode(',',$nuage); // découper la chaîne par rapport aux virgules avec explode() $nuage_compteur=array(); // préparer un tableau vide pour mettre les compteurs foreach($nuage as $etiquette) { $etiquette=trim($etiquette); if (isSet($nuage_compteur[$etiquette])) // si déjà défini on incrémente $nuage_compteur[$etiquette]++; else // sinon on initialise $nuage_compteur[$etiquette] = 1; } foreach($nuage_compteur as $etiquette=>$nombre) { echo "<li> $nombre $etiquette</li>"; } echo "</ul>"; ?>
Ce script m'affiche un tableau du type (nombre d'étiquettes, étiquette):
2 posset
2 ullum
1 quoque
...
Je voudrais afficher les étiquettes par ordre alphabétique. J'ai essayé la fonction asort() mais soit j'obtiens un message d'erreur, soit je classe le tableau sur le nombre d'étiquettes et non sur les étiquettes elles-même. Autrement dit comment peut-on classer un tableau sur la deuxième colonne.
Cordialement

Eléphant du PHP | 86 Messages

17 mars 2010, 16:28

Salut,

Par le Sql...
$sql = mysql_query('SELECT etiquettes FROM articles order by etiquettes asc')

Eléphanteau du PHP | 11 Messages

17 mars 2010, 19:00

Ma description était incomplète, le champ étiquettes de la table articles contient pour chaque articles plusieurs étiquettes, je les concatène dans $nuage, je compte combien de fois chaque étiquette est répétée et j'enlève les doublons. J'ai donc dans $nuage_compteur, si j'ai bien compris, pour chaque étiquette le nombre de répétition. J'affiche ce tableau dans le désordre, je voudrais l'afficher avec les étiquettes classées par ordre alphabétique.
Cordialement

ViPHP
AB
ViPHP | 5818 Messages

18 mars 2010, 01:17

Puisque ton résultat est un tableau, les fonctions de tri sur les tableaux sont ici

Eléphanteau du PHP | 11 Messages

29 mars 2010, 19:41

J'ai galéré pour trouver la bonne fonction pour le bon tableau mais finalement j'ai trouvé une solution avec ksort():

Code : Tout sélectionner

<?php require 'admin/includes/connexion.php'; $nuage=""; $sql = mysql_query('SELECT etiquettes FROM articles') or die(); while ($rang = mysql_fetch_assoc($sql)) { $nuage=$nuage.",".$rang['etiquettes']; } $nuage=substr($nuage, 1); $nuage = explode(',',$nuage); // explode() permet de découper la chaîne $nuage par rapport aux virgules $nuage_compteur=array(); // préparer un tableau vide pour mettre les compteurs foreach($nuage as $etiquette) { $etiquette=trim($etiquette); if (isSet($nuage_compteur[$etiquette])) // si déjà défini on incrémente $nuage_compteur[$etiquette]++; else // sinon on initialise $nuage_compteur[$etiquette] = 1; } ksort($nuage_compteur); // Trie le tableau array suivant les clés, en maintenant la correspondance entre les clés et les valeurs. echo "<ul>"; foreach($nuage_compteur as $etiquette=>$nombre) { echo "<li> $nombre $etiquette</li>"; } echo "</ul>"; ?>

ViPHP
AB
ViPHP | 5818 Messages

29 mars 2010, 23:16

C'est bon alors ?
Puisque cela semble le cas tu peux accepter ta dernière réponse pour dire que c'est résolu, ainsi ceux qui cherchent parmi les messages sauront que ce topic contient une solution :wink: