Comparaison de tableaux

Résolu
Coutcout86 Messages postés 219 Statut Membre -  
 Caligros -
Bonjour,

J'ai un petit problème pour comparer deux tableaux PHP.
Voici mon premier tableau sorti d'une requête LDAP:

Array(
[0] => Array
(
[Identifiant] => id1
[Nom] => nom1
[Prénom] => prenom1
[NomPrenom] => nomPrenom1
[TitreSpecialite] => titre1
[Service] => service1
[AdresseMail] => adressemail1
[Departement] => departement1
[Company] => company1
[Adresse] => adresse1
[Site] => site1
[TelephoneFixe] => tel1
[TelephonePort] => telport1
)

[0] => Array
(
[Identifiant] => id2
[Nom] => nom2
[Prénom] => prenom2
[NomPrenom] => nomPrenom2
[TitreSpecialite] => titre2
[Service] => service2
[AdresseMail] => adressemail2
[Departement] => departement2
[Company] => company2
[Adresse] => adresse2
[Site] => site2
[TelephoneFixe] => tel2
[TelephonePort] => telport2
)
)

Et voici mon autre tableau sorti d'une requête MySQL :


Array(
[0] => Array
(
[uid] => 4
[identifiant] => id4
[email] => email4
[init] => init4
[nom] => nom4
[prenom] => prenom4
[telephonefixe] => telfixe4
[adresse] => adresse4
[service] => service4
[site] => site4
[telephoneinterne] => telinterne4
[fax] => fax4
)

[1] => Array
(
[uid] => 5
[identifiant] => id5
[email] => email5
[init] => init5
[nom] => nom5
[prenom] => prenom5
[telephonefixe] => telfixe5
[adresse] => adresse5
[service] => service5
[site] => site5
[telephoneinterne] => telinterne5
[fax] => fax5
)
)

Et ce que j'aimerais c'est faire un comparaison. Pour chaque clé ''identifiant'' du tableau LDAP, si celle-ci est égale à une clé ''identifiant'' MySQL on met à jour les informations de la personne concernée dans la base de données MySQL sinon on fais rien. Et enfin si la clé ''identifiant'' LDAP n'existe pas dans une des clés ''identifiant'' MySQL on créé un enregistrement dans la base.

Est-ce possible ? Pourriez-vous m'aider ? Faudrait-il faire un FOREACH dans un FOREACH ?

Merci d'avance.
Romain COUTINEAU.

2 réponses

  1. Caligros
     
    Il y a plusieurs façons de faire:

    boucler un tableau et vérifier la valeur avec l'autre.
    ou encore utiliser les fonctions de comparaisons de php

    http://www.php.net/manual/fr/ref.array.php

    array_unique
    array_merge
    array_intersect
    array_uintersect
    ...
    0
    1. Coutcout86 Messages postés 219 Statut Membre
       
      Je biens de faire ça :

      $tabtest[] = array_merge($usersAD,$usersMySQL);

      Et quand j'affiche mon tableau il me retourne que les valeurs de mon tableau ''usersAD''.

      Et j'ai voulu faire ça :

         foreach($usersMySQL as $key =>$users)
      {
      if($usersMySQL['identifiant'] == $usersAD[$key]['identifiant'])
      {
      $tabtest[] = array_merge($usersAD,$usersMySQL);
      }
      }

      Et ça ne marche pas non plus est-ce que j'ai oublié quelque chose ?
      0
    2. Caligros
       
      déjà il y a plusieurs choses à rectifier avant de poursuivre.


      Est-ce que les clés de tableau cité en exemple sont celles que tu utilises ?

      Car il y a des soucis à ce niveau : accent, majuscule, elles sont différentes entre mysql et ldap, de fait on risque de ne pas retrouver les mêmes valeurs ...

      Si oui, il faudra d'abord normaliser les tableaux avant de les comparer, avec notamment array_change_key_case ()




      [Identifiant] => id1 (ldap)
      [identifiant] => id4 (mysql)

      [Prénom] => id1 (ldap)
      [prenom] => id4 (mysql)


      corrige:
      if($users['identifiant'] == $usersAD[$key]['identifiant'])
      0
    3. Coutcout86 Messages postés 219 Statut Membre
       
      Mes clés sont celles-ci :

      LDAP => Identifiant
      MySQL => identifiant

      Et donc dans mon If j'ai fais :

      if($users["identifiant"] == $usersAD[$key]["Identifiant"])
      0
    4. Coutcout86 Messages postés 219 Statut Membre
       
      Au final si les identifiants sont égaux j'aimerais avoir un tableau unique :


      [0] => Array
      (
      [Identifiant] => id1
      [Nom] => nom1
      [Prénom] => prenom1
      [NomPrenom] => nomPrenom1
      [TitreSpecialite] => titre1
      [Service] => service1
      [AdresseMail] => adressemail1
      [Departement] => departement1
      [Company] => company1
      [Adresse] => adresse1
      [Site] => site1
      [TelephoneFixe] => tel1
      [TelephonePort] => telport1
      [uid] => 4
      [identifiant] => id4
      [email] => email4
      [init] => init4
      [nom] => nom4
      [prenom] => prenom4
      [telephonefixe] => telfixe4
      [adresse] => adresse4
      [service] => service4
      [site] => site4
      [telephoneinterne] => telinterne4
      [fax] => fax4
      )
      0
    5. Caligros
       
      Méthode foreach:

      <?php

      $usersAD = array (Array(
      "identifiant" => 'id1'),
      array(
      "identifiant" => 'id2'

      ));
      echo "<pre>";
      print_r($usersAD);
      echo "</pre>";



      $usersMySQL = Array(
      Array
      (
      "identifiant" => 'id2'
      ),

      Array
      (
      "identifiant" => 'id5'
      )
      );

      echo "<pre>";
      print_r($usersMySQL);
      echo "</pre>";



      echo "<hr />";

      $tabtest = array();



      foreach($usersAD as $adkey => $ad) {
      foreach($usersMySQL as $sql) {
      if($ad['identifiant'] == $sql['identifiant']) {
      echo $adkey." -> ".$ad['identifiant']. "- > ".$sql['identifiant']."<br />";
      $tabtest[] = $adkey;
      }
      }
      }
      echo "<pre>";
      print_r($tabtest);
      echo "</pre>";


      ?>
      0
  2. JooS Messages postés 2705 Statut Membre 228
     
    Salut,

    Si j'ai bien compris, tu possèdes des enregistrements dans ta base de données, et tu veux soit les mettre a jour(si le même identifiant existe), sinon insérer un nouvel enregistrement.

    Pour faciliter l'opération, il vaut mieux que les noms des clés des deux tableaux soient les mêmes.

    Donc soit tu changes les noms des clés du tableau contenant le nouvelles informations, soit tu utilises un "Alias" lorsque tu sélectionnes les données de ta base.

    Jettes un oeil ici.

    Si t'as des questions, n'hésites pas.

    Mettez en résolu quand c'est résolu -.- ...
    0