创建第三个数组,该数组由PHP中两个独立数组中的相同键值对组成


Create a third array of identical key-value pairs found in two separate arrays in PHP

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

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

查看array_incrosse_assoc的PHP手册,其中解释道:array_incrosso_assoc()返回一个数组,该数组包含所有参数中存在的array1的所有值。请注意,与array_entersect()不同,这些键是在比较中使用的。

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

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

我使用了本机的array_cintersect_assoc函数;

我知道如何获取数组中的键和两个数组中的值,但不知道如何获取键和值的交集。然而,这并不复杂。假设您有数组$a和$b,并希望使数组$c:

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

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

为了简化,我会合并两个数组,然后删除重复的数组

合并两个数组:

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