IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

liste sans doublons


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut liste sans doublons
    bonjour (bonsoir )

    Voici mon soucis, je possède une liste de mots séparé par le caractère | .
    Certains mots peuvent être composé :


    pain d'épice|ballon|pain d'épice|médor|tennis|volley ball|maison


    Comment puis je enlever les doublons de cette liste en utilisant le moins de ressources possibles ? La fonction array_unique ne marche pas car le séparateur n'est pas un espace et que j'utilise des mots composés.

    merci

  2. #2
    jnore
    Invité(e)
    Par défaut
    Salut,

    T'es-tu assuré que la chaine de caractère qui contient "pain d'épice|ballon|pain d'épice|médor|tennis|volley ball|maison
    " est bien un tableau ?

    Sinon il te faut exploser ta chaine comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $chaine="pain d'épice|ballon|pain d'épice|médor|tennis|volley ball|maison";
    $tableau=explode('|',$chaine);//ici on explose la chaine pour qu'elle devienne un tableau
    $tableau=array_unique($tableau);//On dédoublonne

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut
    Bonjour ,

    A l'origine la liste est contenu dans une variable de type chaine de caractère.

    J'utilisais effectivement les fonctions explode / array_unique / implode pour former un tableau et faire la suppression de doublon dessus puis remettre le tous sous forme d'une chaine de caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    unction supprimer_doublon($liste_donnees_a_ajouter)
    {
    	$tableau_liste_donnees_a_ajouter = explode ("|",$liste_donnees_a_ajouter);
    	$tableau_liste_donnees_a_ajouter =  array_unique($tableau_liste_donnees_a_ajouter);	
    	$liste_donnees_a_ajouter = implode (" ", $tableau_liste_donnees_a_ajouter);
    	return $liste_donnees_a_ajouter;
    }
    Je me demande si mon problème ne vient pas d'ailleur car je ne vois pas ce qui cloche dans mon code.

    mais le problème demeurre.

  4. #4
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Je ne comprend pas trop quel est ton problème.

    Je viens de faire un test et ta fonction renvoi bien ce qu'elle est censé renvoyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    function supprimer_doublon($liste_donnees_a_ajouter)
    {
    	$tableau_liste_donnees_a_ajouter = explode ("|",$liste_donnees_a_ajouter);
    	$tableau_liste_donnees_a_ajouter =  array_unique($tableau_liste_donnees_a_ajouter);	
    	$liste_donnees_a_ajouter = implode (" ", $tableau_liste_donnees_a_ajouter);
    	return $liste_donnees_a_ajouter;
    }
     
    echo supprimer_doublon("pain d'épice|ballon|pain d'épice|médor|tennis|volley ball|maison");
    // Affiche : pain d'épice ballon médor tennis volley ball maison

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut
    Oui, tu as raison.
    En fait le problème vient plus du fait du traitement que je fais derrière.

    Une fois la liste récupére sans doublons :

    "pain d'épice ballon médor tennis volley ball maison"

    Je voudrais remplir un champs d'une bdd mysql de type multiselect avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE `bacasable`.`jos_comprofiler` SET `cb_type`= \''.$liste_donnees_a_ajouter.'\' WHERE `jos_comprofiler`.`user_id`='.$user_id;
    Le problème c'est que l'insertion se fait au niveau de chaque blanc:

    pain
    d'épice
    ballon
    médor
    ...


    au lieu de


    pain d'épice
    ballon
    médor
    ...


    donc je ne sais pas trop comment résoudre mon problème, modifier ma requète SQL ?

  6. #6
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    On pourrait avoir tout le code relatif à l'insertion dans la base et au traitement de ta chaine de caracteres ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut
    merci pour l'aide, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    //Je récupère une liste de caractère de la forme :
    $liste_donnees_a_ajouter = 'chien|chat|pain d'épice|pierre rouge|chien|pain d'épice'
     
    //Je supprime les doublons de cette liste :
    $liste_donnees_a_ajouter=supprimer_doublon($liste_donnees_a_ajouter);
     
    //J'écris la liste dans le multiselect de ma bdd
    $query_ajout_categorie='UPDATE `bacasable`.`jos_comprofiler` SET `cb_categoriesport`= \''.$liste_donnees_a_ajouter.'\' WHERE `jos_comprofiler`.`user_id`='.$user_id;	
    		$db->setQuery($query_ajout_categorie);
    		$tt=$db->setQuery($query_ajout_categorie);
    		$tt=$db->query();
     
    //fonction supprimer_doublon
    function supprimer_doublon($liste_donnees_a_ajouter)
    {		
    	$liste_donnees_a_ajouter=ltrim($liste_donnees_a_ajouter,"|| ");	
    	$tableau_liste_donnees_a_ajouter = explode ("|",$liste_donnees_a_ajouter);
    	$tableau_liste_donnees_a_ajouter = array_unique($tableau_liste_donnees_a_ajouter);	
    	$liste_donnees_a_ajouter = implode ("\\n\".", $tableau_liste_donnees_a_ajouter);	
    	echo $liste_donnees_a_ajouter."\n";
    	return $liste_donnees_a_ajouter;
    }
    La fonction supprimer_doublon a évolué, j'essaie de résoudre mon problème.

    Le problème vient du fait que les paramètres de la requête SQL sont mal formulés, ainsi les données s'insèrent mal.
    Il faudrait que j'arrive à sortir une liste que je puisse directement inséré dans ma requête SQL.

  8. #8
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 507
    Par défaut
    tu as deja oublie d'echaper les quotes simple et le point-virgule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste_donnees_a_ajouter = 'chien|chat|pain d\'épice|pierre rouge|chien|pain d\'épice';
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  9. #9
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    ton code montre l'insertion d'une chaîne de caractères donc tu ne réponds pas à la question de Seb33300
    montre nous le code qui sépare la chaîne suivant les espaces

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    ton code montre l'insertion d'une chaîne de caractères donc tu ne réponds pas à la question de Seb33300
    montre nous le code qui sépare la chaîne suivant les espaces
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    if (in_array($fieldvalueid_activite,$fieldvalueid_activite_categorie_sports_de_combats))
    	{	
    		$query_donnees_existante='SELECT `cb_activitesportcombat` FROM `jos_comprofiler` WHERE `user_id`='.$user_id;		
    			$db->setQuery($query_donnees_existante);		
    			$result = $db->loadObjectList();						
    			$compteur=0;
    			foreach ($result as $result) {
    				$donnees_existante[$compteur]=$result->cb_activitesportcombat;
    				$compteur=$compteur+1;		
    			}		
    		$total=count($donnees_existante);
     
    		//ajout de la nouvelle donnee et structuration de l'array a envoyer
    		$donnees_existante[$total]=$nom_activite;
    		for ($i=0; $i<$total+1;$i++)
    		{
    			$liste_donnees_a_ajouter = $liste_donnees_a_ajouter.'|'.$donnees_existante[$i];
    		}
    J'espère que le code reste compréhensible.

Discussions similaires

  1. Automatisation liste sans doublon
    Par mathel dans le forum Excel
    Réponses: 2
    Dernier message: 03/01/2008, 14h28
  2. Liste sans doublon
    Par marc56 dans le forum Excel
    Réponses: 5
    Dernier message: 19/12/2007, 20h22
  3. liste sans doublons
    Par doons dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/10/2007, 14h47
  4. [SQL] Liste sans doublons
    Par tchin dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/09/2007, 14h43
  5. [VBA-E] Liste sans doublons pour remplir cellule
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2007, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo