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

PHP & Base de données Discussion :

recuperer les doublons dans un array multidimentionnel [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut recuperer les doublons dans un array multidimentionnel
    je me suis penché depuis pas mal de temps sur ce problème sans succès .
    j'ai un tableau array de cette façon
    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
     
        [46] => Array
            (
                [fich] => cmd_f
                [ref] => 12V 16A 
                [qty] => 5
                [pa] => $24,82
            )
     
        [34] => Array
            (
                [fich] => cmd_f
                [ref] => 12V-2A
                [qty] => 300
                [pa] => $2,88
            )
     
        [16] => Array
            (
                [fich] => cdm_stat
                [ref] => 12V-2A
                [qty] => 300
                [pa] => 3,54
            )
    j'aimerai que quand il y a un doublon sur le champ ref (dans cette exemple c'est 12v-2a)
    j'aimerai récupérer dans un autre tableau ayant comme structure ceci:
    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
     
        [1] => Array
            (
                [fich] => cmd_f
                [ref] => 12V 16A 
                [qty] => 5
                [pa] => $24,82
                [fich1] => 
                [ref1] => 
                [qty1] => 
                [pa1] => 
            )
     
        [2] => Array
            (
                [fich] => cmd_f
                [ref] => 12V-2A
                [qty] => 300
                [pa] => $2,88
                [fich1] => cdm_stat
                [ref1] => 12V-2A
                [qty1] => 300
                [pa1] => 3,54
            )
    merci pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    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
     
    //Array de départ avec des doublons
    $arrayInitial = array();
    //Array temporaire
    $arrayTemp = $arrayInitial;
    //Array final
    $arrayFinal = array();
    foreach ( $arrayInitial as $value ) {
    	foreach ( $arrayTemp as $value2 ) {
    		if ( $value['fich'] == $value2['fich'] && $value['qty'] == $value2['qty'] && $value['pa'] == $value2['pa'] ) {
    			if ( $value['ref'] != $value2['ref'] ) {
    			 array_push($arrayFinal, $value);
    			}
    		}
    		else {
    			array_push($arrayFinal, $value);
    		}
    	}
    }
     
    print_r($arrayFinal);
    Ca devrait te soulager.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    oh la la un métèorite est passé pour m'aider.
    je teste de suite
    merci

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    je ne pense pas que cela soit une très bonne approche de changer les clés du tableau à chaque doublon trouvé : fiche -> fiche1 -> fiche2... Il serait préférable de créer ton tableau différemment : Array([] => Array(ref => Array([] => Array(cle => valeur)))). Tu isoles les références qui te servent à indentifier tes doublons et tu y rattaches les doublons trouvés tout en préservant leurs clés.
    De cette manière pas besoin de savoir si la clé est fiche1 ou fiche2, elle sera toujours fiche quel que soit le doublons lu.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    [/codeinline] Il serait préférable de créer ton tableau différemment : Array([] => Array(ref => Array([] => Array(cle => valeur)))).
    oh là.
    je ne sais pas quelle sera la structure de ce tableau
    un exemple m'aiderait à mieux comprendre

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $data = array(
       array('fich' => 'cmd_f', 'ref' => '12V 16A', 'qty' => 5, 'pa' => '$24,82'),
       array('fich' => 'cmd_f', 'ref' => '12V-2A', 'qty' => 300, 'pa' => '$2,88'),
       array('fich' => 'cmd_stat', 'ref' => '12V-2A', 'qty' => 300, 'pa' => '$3,54')
    );
     
    $result = array();
    foreach($data as $details) {
       $result[$details['ref']][] = array_diff_key($details, array('ref' => null));
    }
    ?>
    Tu obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array(
       [12V 16A] => Array([0] => Array([fich] => cmd_f    [qty] => 5   [pa] => $24,82))
     
       [12V-2A]  => Array([0] => Array([fich] => cmd_f    [qty] => 300 [pa] => $2,88)
                          [1] => Array([fich] => cmd_stat [qty] => 300 [pa] => $3,54))
    )
    Tes doublons sont regroupés par référence et j'ai simplifié la structure du tableau dans le poste précédent en Array(ref => Array([] => data))

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    ca a l'air simple rawsrc comme code mais pas aussi facile à comprendre.
    Je crois avoir compris .c'est assez astucieux.je teste pour voir

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    et si je veux avoir çà:
    quand il trouve un doublon il met en une seule ligne comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Array(
       [12V 16A] => Array([0] => Array([fich] => cmd_f    [qty] => 5   [pa] => $24,82 [fich1] =>  [qty1] =>  [pa1] => ))
     
       [12V-2A]  => Array([0] => Array([fich] => cmd_f    [qty] => 300 [pa] => $2,88 [fich1] => cmd_stat [qty1] => 300 [pa1] => $3,54))
    )

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ce que tu veux me parait absurde sans compter que comment savoir qu'il faille rajouter des clés vides fich1, qty1, pa1 à la référence [12V 16A] alors qu'il n'y a aucun doublon ? En fonction de quelle règle ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    en fait c'est pour pouvoir exporter les données du tableau en fichier plat csv.
    si je trouve un doublon,pour une meme référence exemple(12v-2a) ,je peux ainsi comparer plus facilement l'ancien prix d'achat avec le nouveaux prix d'achat pa1 et pa, calculer les ratios ect..

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci quand meme à tous les 2.j'ai réussi à faire ce que je veux avec un code long et pas super propre et bien sur en adaptant vos codes.Pas grave faut faire avec

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Si ça marche tant mieux.

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

Discussions similaires

  1. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12
  2. Réponses: 5
    Dernier message: 25/07/2005, 14h03
  3. [sql] [oracle] éliminer les doublons dans sum ?
    Par trungsi dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/03/2005, 12h29
  4. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18
  5. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 19h37

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