如何获得对应于两个数组中不同值的键?

时间:2011-07-06 14:48:15

标签: php arrays

$arr1 = array('potato'=>1,'tomato'=>2,'apple'=>5,'banana'=>10);
$arr2 = array('orange'=>20,'tomato'=>3,'apple'=>5,'banana'=>20);

我需要返回数组的函数('tomato','banana'),认为它省略了一个或另一个数组中不存在的键。 Apple在两个数组中都具有相同的值,因此应该省略 - 返回的应该只是其值不同并设置的键

5 个答案:

答案 0 :(得分:4)

这应该有效(demo):

$arr1 = array('potato'=>1,'tomato'=>2,'apple'=>5,'banana'=>10);
$arr2 = array('orange'=>20,'tomato'=>3,'apple'=>5,'banana'=>20);
$result = array_keys(array_diff(array_intersect_key($arr1, $arr2), $arr2));
print_r($result);

输出:

Array
(
    [0] => tomato
    [1] => banana
)

参考:

答案 1 :(得分:2)

$array3 = array();
foreach(array_intersect_key($array1, $array2) as $key => $v){
 if($array1[$key] != $array2[$key]) $array3[] = $key;
}

答案 2 :(得分:2)

<?php
/**
* Returns an array which contains keys which are in both $array1
* and $array2, and which have different values.
*/
function getKeysWhichMatchAndHaveDifferentValues($array1, $array2)
{
    $arrIntersected = array_intersect_key($array1, $array2);
    foreach($arrIntersected as $key => $value) 
    {
            if($array2[$key] == $value) {
                    unset($arrIntersected[$key]);
            }
    }
    return array_keys($arrIntersected);
}

$arr1 = array('potato'=>1,'tomato'=>2,'apple'=>5,'banana'=>10);
$arr2 = array('orange'=>20,'tomato'=>3,'apple'=>5,'banana'=>20);

$final = getKeysWhichMatchAndHaveDifferentValues($arr1, $arr2);
echo '<pre>' . print_r($final) . '</pre>';
?>

答案 3 :(得分:1)

我会做简单的循环。

当然,如果您需要比较大型数组,本机PHP函数可以提供很多帮助。现在仍然无法回答什么是最佳的做法。

答案 4 :(得分:0)

您可以使用array_intersectarray_keys执行此操作。

$arr3 = array_intersect(array_keys($arr1), array_keys($arr2));