0

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

4

4 回答 4

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

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

于 2013-07-18T19:51:55.360 回答
1

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

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

我使用了原生的array_intersect_assoc函数;

于 2013-07-18T20:15:02.730 回答
0

我知道如何获取数组中的键和两个数组中的值,但不知道键和值的交集。然而,它并不复杂。假设你有数组 $a 和 $b 并且想要创建数组 $c:

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

如果 $b[$k] 未设置,这将引发错误,但如果您愿意,可以忽略这些错误。

于 2013-07-18T19:54:15.223 回答
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 );
于 2013-07-18T19:58:33.407 回答