数组在数组中的键上相交?

2022-08-30 20:32:41

我有一个数组,其中包含国家/地区:

array(
'AF'=>'AFGHANISTAN',
'AL'=>'ALBANIA',
'DZ'=>'ALGERIA',
'AS'=>'AMERICAN SAMOA',
);

我有另一个数组,里面有一些键

array('AL', 'DZ');

我想调用一个函数,它将两个数组作为参数并返回

array(
'AL'=>'ALBANIA',
'DZ'=>'ALGERIA',
);

我知道php有内置的函数来比较键或值,但似乎这些函数都希望你有两个1D数组或两个2D数组。

我可以循环访问第一个数组并检查每个键,但这似乎真的无效......array_keys()in_array()


答案 1
$selection = array('AL', 'DZ');
$filtered = array_intersect_key($countries, array_flip($selection));
var_dump($filtered);

答案 2

只需循环访问 SECOND 数组,并从第一个数组中获取值。反之亦然,似乎确实没有必要低效。

所以:

$Arr1 = array(
'AF'=>'AFGHANISTAN',
'AL'=>'ALBANIA',
'DZ'=>'ALGERIA',
'AS'=>'AMERICAN SAMOA',
);

$Arr2 = array('AL', 'DZ');

$result = array();
foreach ($Arr2 as $cc){
  if (isset($Arr1[$cc])){
    $result[$cc] = $Arr1[$cc];
  }
}
print_r($result);

我不认为这是低效的。

编辑添加:如果您 100% 确定 $Arr 2 仅包含可在 $Arr 1 中找到的代码,您当然可以跳过 isset() 测试。