Trier un tableau indexé

kitiop Messages postés 2 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 21 octobre 2004 - 21 oct. 2004 à 11:28
magidev Messages postés 249 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 28 août 2009 - 24 oct. 2004 à 00:54
Bonjour à tous,

J'ai une chaîne composée de plusieurs mots que je transforme en un tableau avec :
$mots=explode(" ",$mots);

j'afficher ce tableau avec :
for ($index=0;$index<count($mots);$index++)
{
echo $mots[$index]."
";
}

Ce tableau comporte des doublons voire plus, que je souhaite supprimer. Pour les supprimer, je pense faire une comparaison. Pour la réaliser simplement, je veux d'abord trier mon tableau.

Mon problème vient du fait que les fonctions array_multisort et sort ne me renvoient rien (ou alors, je ne sais pas comment les récupérer !).
Je trie avec :
$mots=array_multisort($mots,SORT_ASC);
ou
$mots=sort($mots);
Pour récupérer le résultat, j'utilise la méthode avec for indiquée plus haut.
Résultat : rien.
Si quelqu'un peut m'aider ;)
Merci

2 réponses

rekam Messages postés 122 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 10 mars 2011
22 oct. 2004 à 19:47
Salut

Pkoi utiliser array_multisort ? A priori, ton tableau $mots ne contient qu'une seule dimension. Utilise plutot array_unique(), ça devrait le faire ;) . Ensuite, tu utilises sort() pour arranger le tout comme tu veux.
0
magidev Messages postés 249 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 28 août 2009
24 oct. 2004 à 00:54
Tu peux utiliser un algo du genre SimpleSort ou BubbleSort

BubbleSort :

Le principe est simple : c'est de la comparaison élément par élément en réduisant à chaque fois l'intervalle de tri.
C'est à dire qu'au début on parcours tout le tableau, on déplace l'élément le plus grand vers la droite (ou le plus petit en fonction du type de tri), si il y a une inversion (le tableau n'est donc pas trié), sinon, on peut s'arrêter

$k = 4;
$permut = $k;
do {
$k = $permut - 1;
for ($j=1; $j<=$k; $j++) {
if ($topDest[$j] > $topDest[$j+1])
{
$tempValue = $topDest[$j];
$topDest[$j] = $topDest[$j+1];
$topDest[$j+1] = $tempValue;
$permut = $j;
}
}
} while $permut <= $k;

SimpleSort:

Le Quick Sort est assez simple à comprendre, mais assez compliqué à transcrire en algorithme. Le Quick Sort consiste à trier un tableau en le découpant récursivement en 2 sous tableaux, où les éléments du premier tableau sont inférieurs aux éléments du second. En faisant une opération récursive, on découpe le tableau en élément de plus en plus petit, jusqu'à arriver à un sous tableau à un seul élément, qui est donc forcément trié. Ensuite, en remontant, les éléments sont triés petit à petit.

function mysplit(&$TopDest, &$K, &$L, &$I) {
$I = $K;
$J = $L+1;
$X = $TopDest[$I];
do {
do {
$J = $J-1;
}
while (($TopDest[$J] > $X) && ($I <> $J));
$TopDest[$I] = $TopDest[$J];
while (($I < $J) && ($TopDest[$I] <= $X)) {
$I = $I+1;
}
$TopDest[$J] = $TopDest[$I];
}
while ($I != $J);
$TopDest[$I] = $X;
}

function quicksort (&$TopDest, $K, $L) {
if ($K < $L) {
mysplit ($TopDest, $K, $L, $I);
quicksort ($TopDest, $K, $I-1);
quicksort ($TopDest, $I+1, $L);
}
}

*************
On a parfois de la chance dans son malheur, moi par exemple, je me suis blessé avec une boite de sparadraps (P.Geluck)

Si vous désirez vous ajouter dans mes contacts MSN, veuillez m'envoyer un message via ce site.
0
Rejoignez-nous