比较两个多维关联数组

时间:2010-09-15 16:31:32

标签: php arrays

如果数组1中存在数组1中的电子邮件地址(此处为uname1@email.com),我想比较两个数组。在这种情况下,它应显示电子邮件已存在。

$Array1 = Array
(        
[0] => Array
        (
            [username] => uname1
            [name] => fullname1
            [email] => uname1@email.com

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

$Array2 = Array
(    
[0] => Array
        (
            [username] => uname1
            [name] => fullname1
            [email] => uname1@email.com    
        )
}

4 个答案:

答案 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));

这将生成一个数组,其中包含第二个数组中包含电子邮件的第一个数组的所有值。然后,您可以遍历该数组以显示错误消息。

答案 1 :(得分:1)

我会建立一个数组2的索引,其中电子邮件地址是关键:

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

然后,对于数组1中的每个项目,检查现有电子邮件地址的成本仅为O(1):

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

答案 2 :(得分: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.';
?>

答案 3 :(得分:0)

很容易。

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

如果您想检查是否找到了某些内容,请记住这样做:

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

原因是如果在$ Array1中的索引0处找到结果并将检查写为

,则array_search可以返回整数0
 if ($result == false) { print "Not found"; }
在这种情况下,

将打印“未找到”。