2010-09-15 2 views
0

Я хочу сравнить два массива, если в массиве 2 существует адрес электронной почты в массиве 1 (здесь: [email protected]). В этом случае он должен показать, что письмо уже существует.Сравнение двух многомерных ассоциативных массивов 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

Любое из этих решений работает для вас? –

ответ

1

Возможно, вы захотите использовать электронное письмо в качестве ключа. Что-то вроде этого:

$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)); 

Это дает массив, содержащий все значения первого массива, которые имеют электронный подарок во втором массиве. Затем вы можете перебирать этот массив для отображения сообщений об ошибках.

0

Pretty стандарт.

<?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

Считайте, что этот алгоритм O (n^2). – Gumbo

1

я хотел бы построить индекс массива 2, где адрес электронной почты является ключевой:

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

Тогда проверка существующих затрат адреса электронной почты только O (1) для каждого элемента в массиве 1:

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

Его легко.

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

Если вы хотите, чтобы проверить, было ли найдено что-то, не забудьте сделать это следующим образом:

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

Причина заключается в том, что array_search может возвращать целое число 0, если результат был найден по индексу 0 в $ Array1 и запись проверки как

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

напечатает «Не найдено» в этом случае.

+0

Я не уверен, что он работает с массивами, и даже если это произойдет, это будет работать, только если 'username' и' name' тоже совпадают. –

+0

Он работает с массивами, я пробовал перед публикацией. И да, это должно быть точное совпадение, и имя пользователя, и имя должны совпадать. –

Смежные вопросы