如果我有两个键值对数量相等的关联数组,是否有一种简化的方法来创建第三个数组,该数组提供两个数组中存在的键值对。它必须是相同的键值对,而不仅仅是相同的键或相同的值(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 );