[RESOLU] Eliminer les doublons dans une chaine

Invité
Invité n'ayant pas de compte PHPfrance

30 sept. 2008, 07:50

Bonjour,

Comme dit dans le sujet je voudrais éliminer les doublons grasse à array_unique dans une chaine contenant des adresse email tirés d'un champ input.

Voila le champ :
Mon problème c'est comment découper le contenu de mon input pour construire mon tableau (array) ?

Pouvez-vous me guider ?
Merci

Mammouth du PHP | 1353 Messages

30 sept. 2008, 10:38

Bonjour,

Regardes du coté de la fonction explode() qui te permet de transformer une chaine de caractère en tableau selon un séparateur.
Par contre il faudrait un séparateur qui soit toujours le meme (; par exemple) ca serait plus simple.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

30 sept. 2008, 11:03

oui effectivement je me suis trompé, le séparateur sera toujours ;

avec explode j'en suis la :

Code : Tout sélectionner

<input type="text" name="email" value="[email protected];[email protected],[email protected]" />

$champ = $_POST["email"];
$champ = explode(";", $champ);

$result = array_unique($champ);

Seulement il faudrait boucler pour incrémenter le array ?
Il faudrait compter aussi le nombre d'entré en entrée et au final afin de lancer éventuellement une action sur chaque entrée au final.

Avec une boucle while cela serait possible ?

Mammouth du PHP | 1353 Messages

30 sept. 2008, 11:51

Seulement il faudrait boucler pour incrémenter le array ?
Il faudrait compter aussi le nombre d'entré en entrée et au final afin de lancer éventuellement une action sur chaque entrée au final.
Je ne suis pas sur de comprendre ces questions.

Pas besoin de boucler, la fonction array_unique traite tout le tableau.
Pour compter le nombre d'entrée tu peux utiliser la fonction count() avant et après le traitement par array_unique().

Enfin, pour parcourir les éléments d'un tableau pour lancer une action dessus tu peux utiliser le foreach
Exemple
foreach($result as $email)
{
    echo "J'envoie un mail à : ".$email."<br/>";
}
Tu peux aussi le faire avec une boucle while ou for mais il faudra surement réorganiser tes index dans ce cas, parce que avec la suppression des doublons certaines valeurs n'existe plus...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 1996 Messages

30 sept. 2008, 23:10

C'est vrai c'est un peu flou ton truc :

Pour compter le nombre d'entrée dans ta tableau utilises comme te l'a dis guilt92 la fonction count($champ);

Si tu veuix tester si la valeur existe avant de la rentrer dans ton tableau utilise d'abord la fonction if() combiné avec in_array() puis array_push() :
$valeur ="[email protected]";
if (!in_array($valeur,$champ)) array_push($champ,$valeur);
Pour ton exemple, je verrais ainsi tout combiné :
$champ = array();
foreach ($_POST["email"] as $valeur)
{
if (!in_array($valeur,$champ)) array_push($champ,$valeur);
}
$nombre_entree_avant = count($_POST["email"];
$nombre_entree_apres = count($champ);
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr