Comparaison de tableaux

Résolu
Coutcout86 Messages postés 195 Date d'inscription   Statut Membre Dernière intervention   -  
 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.
A voir également:

2 réponses

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
Coutcout86 Messages postés 195 Date d'inscription   Statut Membre Dernière intervention  
 
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
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
Coutcout86 Messages postés 195 Date d'inscription   Statut Membre Dernière intervention  
 
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
Coutcout86 Messages postés 195 Date d'inscription   Statut Membre Dernière intervention  
 
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
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
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   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