在PHP中创建在两个单独数组中找到的第三个相同键值对的数组

时间:2013-07-18 19:49:47

标签: php arrays

如果我有两个具有相同数量的键值对的关联数组,是否有一种简化的方法来创建第三个数组,该数组提供两者中存在的键值对。它必须是相同的键值对,而不仅仅是相同的键或相同的值(array_intersect仅标识相同的键)。欢呼声

4 个答案:

答案 0 :(得分:3)

$array3 = array_intersect_assoc($array1, $array2);

查看array_intersect_assoc的PHP手册,其中解释了:array_intersect_assoc()返回一个数组,其中包含所有参数中存在的array1的所有值。请注意,与array_intersect()不同,这些键用于比较。

答案 1 :(得分:1)

如果$a$b是您的数组,您可以获得第三个数组$c,如下所示:

$c = array_intersect_assoc($a, $b);

我使用了原生的array_intersect_assoc函数;

答案 2 :(得分:0)

我知道如何在两个数组中的数组和值中获取键,但不知道键和值的交集。但是,它并不复杂。假设您有数组$ a和$ b并且想要生成数组$ c:

$c = array();
foreach($a as $k=>$v) if($b[$k] == $v) $c[$k]=$v;

如果未设置$ b [$ k],则会抛出错误,但如果您愿意,可以忽略它们。

答案 3 :(得分:0)

我会合并两个数组然后删除重复项以简化

合并两个数组:

    function merge_common_keys(){
    $arr = func_get_args();
    $num = func_num_args();

    $keys = array();
    $i = 0;
    for($i=0;$i<$num;++$i){
        $keys = array_merge($keys, array_keys($arr[$i]));
    }
    $keys = array_unique($keys);

    $merged = array();

    foreach($keys as $key){
        $merged[$key] = array();
        for($i=0;$i<$num;++$i){
            $merged[$key][] = isset($arr[$i][$key])?$arr[$i][$key]:null;
        }
    }
    return $merged;
}

合并然后删除重复项

$merged = merge_common_keys($array1,$array2);    

$unique = array_unique($merged );