2010-09-15 5 views
0

Je souhaite comparer deux tableaux si une adresse électronique du tableau 1 existe dans le tableau 2 (ici: [email protected]). Dans ce cas, il devrait afficher que l'email existe déjà.comparaison de deux tableaux associatifs multidimensionnels s

$Array1 = Array 
(  
[0] => Array 
     (
      [username] => uname1 
      [name] => fullname1 
      [email] => [email protected] 

     ) 
[1] => Array 
     (
      [username] => uname2 
      [name] => fullname2 
      [email] => [email protected]  
     ) 
[2] => Array 
     (
      [username] => uname3 
      [name] => fullname3 
      [email] => [email protected]@email.com  
     )   
} 

$Array2 = Array 
( 
[0] => Array 
     (
      [username] => uname1 
      [name] => fullname1 
      [email] => [email protected]  
     ) 
} 
+0

L'une de ces solutions fonctionne pour vous? –

Répondre

1

Vous pourriez envisager d'utiliser l'email comme clé. Quelque chose comme ceci:

$a1 = array(); 
foreach ($Array1 as $v) $a1[$v['email']] = $v; 

$a2 = array(); 
foreach ($Array2 as $v) $a2[$v['email']] = $v; 

$intersection = array_values(array_intersect_key($a1, $a2)); 

Cela donne un tableau qui contient toutes les valeurs du premier réseau qui ont un présent e-mail dans le second tableau. Vous pouvez ensuite parcourir ce tableau pour afficher les messages d'erreur.

0

Assez standard.

<?php 
function userExists() { 
    global $Array1, $Array2; 
    for($Array2 as $user) { 
     for($Array1 as $existingUser) { 
      if($user['email'] == $existingUser['email']) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
if(userExists()) 
    echo 'user exists.'; 
?> 
+0

Considérons que cet algorithme est O (n^2). – Gumbo

1

Je construis un indice de tableau 2 où l'adresse e-mail est la clé:

$index = array(); 
foreach ($Array2 as $item) { 
    $index[$item['email']] = true; 
} 

vérifier ensuite pour un coût d'adresse e-mail existant seulement O (1) pour chaque élément dans le tableau 1:

foreach ($Array1 as $item) { 
    if (isset($index[$item['email']])) { 
     echo 'email already exists'; 
    } 
} 
0

C'est facile.

$result = array_search($Array2[0], $Array1) 
var_dump($result); 

Si vous voulez vérifier si quelque chose a été trouvé, souvenez-vous de le faire comme ceci:

if ($result !== false) { print "Found!"; } 

La raison est que array_search peut retourner entier 0, si le résultat a été trouvé à l'indice 0 en $ Array1 et l'écriture de la vérification comme

if ($result == false) { print "Not found"; } 

affichera "Non trouvé" dans ce cas.

+0

Je ne suis pas sûr que cela fonctionne avec les tableaux et même si c'est le cas, cela ne fonctionnerait que si 'username' et' name' sont également les mêmes. –

+0

Il fonctionne avec les tableaux, j'ai essayé avant de poster. Et oui, il doit correspondre exactement, le nom d'utilisateur et le nom doivent correspondre. –

Questions connexes