Trier un tableau indexé

Signaler
Messages postés
2
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
21 octobre 2004
-
Messages postés
249
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
28 août 2009
-
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

Messages postés
122
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
10 mars 2011

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.
Messages postés
249
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
28 août 2009

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.