2010-09-15 86 views
0

如果數組1中的電子郵件地址存在於數組2中(這裏是:[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

任何這些解決方案都適合您? – 2010-09-23 03:31:24

回答

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

非常標準。

<?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 2010-09-15 16:42:36

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'也是一樣的情況下才起作用。 – 2010-09-15 16:45:37

+0

它可以與數組一起工作,我在發佈之前嘗試過。是的,它必須完全匹配,用戶名和名稱都必須匹配。 – 2010-09-15 16:54:08