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 :

Comparer 2 tableaux


Sujet :

Langage PHP

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut Comparer 2 tableaux
    Bonjour,

    Soit une chaîne json de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $json = '{"0": {"id": 105, "sh": 0, "cm": 0, "vt": 0},"1": {"id": 106, "sh": 0, "cm": 0, "vt": 0}}';
    Je la décode avec $tab_orig = json_decode($json, TRUE); et ça me donne ce tableau :
    tab_orig :
    
    Array
    (
        [0] => Array
            (
                [id] => 105
                [sh] => 0
                [cm] => 0
                [vt] => 0
            )
    
        [1] => Array
            (
                [id] => 106
                [sh] => 0
                [cm] => 0
                [vt] => 0
            )
    
    )
    
    Soit maintenant un tableau similaire, issu du résultat d'une requête SQL :
    tab_new :
    
    Array
    (
        [0] => Array
            (
                [id] => 105
                [sh] => 0
                [cm] => 0
                [vt] => 0
            )
    
        [1] => Array
            (
                [id] => 106
                [sh] => 2 // la différence est là !
                [cm] => 0
                [vt] => 0
            )
    
    )
    
    Sachant que les clés [id] peuvent apparaître dans n'importe quel ordre dans les deux tableaux, quelle fonction de comparaison de tableau utiliser pour détecter la différence de [sh] pour [id] = 106 ?

    Ou plus généralement, comment trouver la différence entre une chaîne json issue d'une fonction Ajax et un tableau multidimensionnel issu d'une requête SQL dans la partie PHP du programme Ajax ?

  2. #2
    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 : 48
    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
    Salut,

    A mon avis, il n'y a pas de soluce miracle,
    je ferais un truc dans ce genre :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
     
    $tab_orig = array(
        0 => array(
            'id' => 105,
            'sh' => 0,
            'cm' => 0,
            'vt' => 0
        ),
        1 => array(
            'id' => 106,
            'sh' => 0,
            'cm' => 0,
            'vt' => 0
        )
    );
     
    $tab_new = array(
        0 => array(
            'id' => 106,
            'sh' => 2,
            'cm' => 0,
            'vt' => 0
        ),
        1 => array(
            'id' => 105,
            'sh' => 0,
            'cm' => 0,
            'vt' => 0
        )
    );
     
    foreach($tab_orig as $k => $v) {
        $map_origin[$v['id']] = $k;
    }
     
    foreach($tab_new as $k => $v) {
        $map_new[$v['id']] = $k;
    }
     
    $id       = 106;
    $is_equal = $tab_orig[$map_origin[$id]]['sh'] == $tab_new[$map_new[$id]]['sh'];
     
    // ou pour tous les id
    foreach($map_origin as $id => $k) {
        $comp[$id] = ($tab_orig[$map_origin[$id]]['sh'] == $tab_new[$map_new[$id]]['sh']);
    }
     
    ?>

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Merci pour la réponse.

    Je craignais un truc de ce genre !

    J'ai aussi la possibilité, je pense, de faire ce genre de tableaux :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    tab_orig :
     
    Array
    (
      [105] => Array
      (
        [id] => 105
        [sh] => 0
        [cm] => 0
        [vt] => 0
      )
     
      [106] => Array
      (
        [id] => 106
        [sh] => 0
        [cm] => 0
        [vt] => 0
      )
     
    ) 
     
    tab_new :
     
    Array
    (
      [105] => Array
      (
        [id] => 105
        [sh] => 0
        [cm] => 0
        [vt] => 0
      )
     
      [106] => Array
      (
        [id] => 106
        [sh] => 2 // la différence est là !
        [cm] => 0
        [vt] => 0
      )
     
    )
    Est-ce que le fait d'avoir l'identifiant en clé principale du tableau aiderait à trouver une fonction plus simple ?

    Et comme je n'ai à comparer que les sh, cm et vt, je peux aussi supprimer l'id des sous-tableaux.

  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 : 48
    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
    Effectivement, si tu as la possibilité de remanier légèrement tes tableaux, la vérification peut se faire en une seule ligne :
    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
    25
    26
    27
    28
    29
    30
    31
    <?php
     
    $tab_orig = array(
        105 => array(
            'sh' => 0,
            'cm' => 0,
            'vt' => 0
        ),
        106 => array(
            'sh' => 0,
            'cm' => 0,
            'vt' => 0
        )
    );
     
    $tab_new = array(
        106 => array(
            'sh' => 2,
            'cm' => 0,
            'vt' => 0
        ),
        105 => array(
            'sh' => 0,
            'cm' => 0,
            'vt' => 0
        )
    );
     
    $diff = array_diff_assoc($tab_new[106], $tab_orig[106]); // array(sh => 2)
     
    ?>
    array_diff_assoc()

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Merci, ça semble bien fonctionner en effet.
    Je laisse la discussion ouverte tant que je n'ai pas testé sur le cas réel qui n'est pas fini de programmer.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    pour ma part je n'ai pas tout a fait compris; pour illustrer json,

    c un moyen permettant de transporter une info d'un point A , a un point B; par exemple transporter des personnes dans un wagon de la sncf

    relativement, j' emmène une info du point A au point B, et gère un peu son trajet ; ben l'avantage de Json, c'est de ne pas a avoir a se préoccuper de la personne qui porte la valise, car je sais que le contenu de ma valise arrivera a bon port...

    alors aussi , c'est compatible multi langage

    et pour ce qui connaissent pas ca, je leurs conseils de s'y mettre des a présent

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Quel rapport avec ma question ascito ?

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Ou plus généralement, comment trouver la différence entre une chaîne json issue d'une fonction Ajax et un tableau multidimensionnel issu d'une requête SQL dans la partie PHP du programme Ajax ?
    la chaine json, c'est la valise, donc une fois arrivé a la gare, ca devient un array php, et aussi a la gare tu a des infos qui proviennent d'une bdd, mais le fait que ce soit json ne change rien, car la soustraction se fera en php, et qui plus est , la soustraction se fera Array - Array; cela dit c'est la forme qui compte, pas le transport...

Discussions similaires

  1. [Tableaux] Comparer 2 tableaux à 2 dimensions
    Par lili2704 dans le forum Langage
    Réponses: 3
    Dernier message: 16/11/2007, 14h21
  2. Comparer deux tableaux
    Par gefrey54 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 12/09/2007, 10h58
  3. [Tableaux] Comparer 2 tableaux
    Par lama85 dans le forum Langage
    Réponses: 3
    Dernier message: 08/08/2006, 15h19
  4. comparer deux tableaux
    Par djibril dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 15h26

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