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 :

Recherche une fonction pour supprimer des doublons dans un tableau à 2 dimensions


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Recherche une fonction pour supprimer des doublons dans un tableau à 2 dimensions
    Bonjour,

    Je recherche sur internet et dans les forums une fonction que quelqu'un aurait créé et qui serai fiable pour supprimer des doublons dans un tableau à 2 dimensions suivant une colonne.

    J'ai développé ma propre fonction, mais elle n'est pas fiable et pas pratique à utiliser.

    Si vous avez quelque chose sous la main, je suis preneur.


    Merci d'avance

    Arnaud

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    salut,
    donnes nous un petit exemple avec un doublon dedans

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    un exemple :

    array {
    array{toto,titi,popo}
    array{tipo,kiko,pomo}
    array{toto,kiki,momo}
    }
    J'avais fais quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $dataUsers = array();
    $comparaison = array();
    BOUCLE{
        $dataUsers[] = array(strtoupper(str_replace($separateurs,'.',$ligne[1]).'.'.str_replace($separateurs,'.',$ligne[0])),'',md5(strtolower($ligne[0])),$ligne[12],$ligne[13],$ligne[14],'NULL',$ligne[0],$ligne[1],$ligne[5],0,'fr_FR',20, 1, 'Numéro de matricule : '.$ligne[2], -1, 1,'0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 0, 0, 1, 1, 1, 0);
        $comparaison[] = $ligne[3];
    }
    // On supprime les doublons possibles
    $comparaison = array_unique($comparaison);
    foreach ($comparaison as $cleComparaison => $valComparaison) 
    {
    	$dataUsersSansDoublons[] = $dataUsers[$cleComparaison];
    }

    mais j'ai remarqué au moment de faire "$dataUsersSansDoublons[] = $dataUsers[$cleComparaison];", dans $dataUsersSansDoublons, j'ai tout ce que contient $dataUsers (avec les doublons...) alors que dans $comparaison, j'ai aucuns doublons.

    Mon problème provient donc de "$dataUsersSansDoublons[] = $dataUsers[$cleComparaison];"
    merci encore...

  4. #4
    FoxLeRenard
    Invité(e)
    Par défaut
    Je me perd un peut beaucoup dans les éléments que tu donnes,

    Toi tu connais ton truc ,et ça te parait évident, moi c'est

    En tout cas je ne vois pas de comparaison se faire dans ton foreach

    En fait tu devrais avoir un seul aray ,
    et imbriquer deux foreach , enfin je crois

    Houps !! Je réédites car j'ais trouvé ça

    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
    
    function DedoublonneArrayAsso( liste) {
       var listeK = new Array() ;
       for ( var i in liste ) listeK[liste[i]] = i ;
       liste = new Array() ;
       for ( var i in listeK) liste[listeK[i]] = i;
       return liste;   
    }
    
    
    
    var monTableauSansDoublon = 
                 DedoublonneArrayAsso(monTableauAvecDoublons);
    
    // ou
    var maListeSansDoublon = 
                   DedoublonneArrayAsso(maListeAvecDoublon);
    Dernière modification par FoxLeRenard ; 09/02/2009 à 12h59.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Bah c'est simple, j'ai un array à deux dimensions.

    Ligne 38 :
    --------0 > VINCENT.ALLARD
    --------1 >
    --------2 > 73914e849da357790d3bc24ed3460a53
    --------3 > vincent.allard@truc.com
    --------4 > 4747
    Ligne 39 :
    --------0 > STEPHANE.MAILLARD
    --------1 >
    --------2 > c60e30b86fe9dfdebc56846821ecf225
    --------3 > stephane.maillard@truc.com
    --------4 > 4748
    Ligne 40 :
    --------0 > STEPHANE.MAILLARD
    --------1 >
    --------2 > c60e30b86fe9dfdebc56846821ecf225
    --------3 > stephane.maillard@truc.com
    --------4 > 4748
    Ligne 41 :
    --------0 > CHRISTIAN.TOULOUSE
    --------1 >
    --------2 > 43b3fa47f36af1ff5f4200db6500bdc0
    --------3 > christian.toulouse@truc.com
    --------4 > 4749
    et dans ce tableau, je veux supprimer les doublons par rapport à la colonne "0" qui est le nom du users.

    Ligne 39 :
    --------0 > STEPHANE.MAILLARD
    --------1 >
    --------2 > c60e30b86fe9dfdebc56846821ecf225
    --------3 > stephane.maillard@truc.com
    --------4 > 4748
    Ligne 40 :
    --------0 > STEPHANE.MAILLARD
    --------1 >
    --------2 > c60e30b86fe9dfdebc56846821ecf225
    --------3 > stephane.maillard@truc.com
    --------4 > 4748

  6. #6
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Moi je ferais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $tableau2=array();
    //$tableau etant le tableau ayant les donnees
    foreach($tableau as $value)
    {
      if(!in_array($value[0],$tableau2))
      $tableau2[]=$value;
    }

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par gerald_cligraphcrm Voir le message
    Moi je ferais un truc du genre :
    Voila qui me parait bien, je me le garde

    Merci arnaudperfect pour ton exemple concret

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    de rien

    moi j'ai fais cela, qui permet de filtré suivant colonne (comme dans excel):

    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
     
    $IDArrayDataUsers = 0;
     
     
    BOUCLE() // Dans mon cas d'application, je parse un fichier CSV, et j'injecte les données du fichier CSV dans un tableau.
    {
        // Tableau des données
        $dataUsers[$IDArrayDataUsers] = array($ligne[0],$ligne[1],$ligne[2],$ligne[3]);
        // Tableau qui va me permettre d'enlever les doublons du tableau dataUsers suivant les critères suivant : Nom ($ligne[0]) et Prénom ($ligne[1]) (on peux en ajouter d'autres
        $comparaison[$IDArrayDataUsers] = $ligne[2];
        $IDArrayDataUsers++;
    }
     
    // On supprime les doublons possibles (bien vérifier que les ID du tableau à dédoublonner sont identique au tableau de comparaison d'où mon $IDArrayDataUsers)
    $dataUsersSansDoublons = array();
    $comparaison = array_unique($comparaison);
    foreach ($comparaison as $cleComparaison => $valComparaison) 
    {
    	$dataUsersSansDoublons[] = $dataUsers[$cleComparaison];
    }
    En faite mon problème ne verai pas de mon algo, mais de mon tableau principal et mon tableau de comparaison qui avait des ID différent lors de leur génération. De ce faite, lorsque j'utilisais array_unique, il y avait un décalage dans les ID et donc des grosses erreurs dans mes données obtenu après dédoublonnage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une macro pour supprimer des lignes dans un message
    Par blade2a dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/06/2012, 01h26
  2. [XL-2007] Créer une macro pour supprimer des onglets dans un autre classeur
    Par nicosd54 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 10h01
  3. supprimer des doublons dans un Tableau
    Par www.rubis dans le forum Langage
    Réponses: 3
    Dernier message: 10/02/2011, 15h23
  4. Réponses: 2
    Dernier message: 27/08/2008, 09h13
  5. Requête pour supprimer des doublons dans une table
    Par nomade333 dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/03/2008, 12h48

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