首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组在数组中的键上相交?

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

Stack Overflow用户
提问于 2012-07-25 15:00:04
回答 4查看 8.2K关注 0票数 20

我有一个包含国家的数组:

代码语言:javascript
复制
array(
'AF'=>'AFGHANISTAN',
'AL'=>'ALBANIA',
'DZ'=>'ALGERIA',
'AS'=>'AMERICAN SAMOA',
);

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

代码语言:javascript
复制
array('AL', 'DZ');

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

代码语言:javascript
复制
array(
'AL'=>'ALBANIA',
'DZ'=>'ALGERIA',
);

我知道php内置了比较键或值的函数,但这些函数似乎都希望你有两个一维数组或两个二维数组。

我可以遍历第一个数组的array_keys()并对每个键进行in_array()检查,但这似乎真的效率很低……

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-25 15:16:58

代码语言:javascript
复制
$selection = array('AL', 'DZ');
$filtered = array_intersect_key($countries, array_flip($selection));
var_dump($filtered);
票数 45
EN

Stack Overflow用户

发布于 2012-07-25 15:13:45

只需在第二个数组上循环,并从第一个数组中获取值。反之亦然,似乎没有必要,效率确实很低。

所以:

代码语言:javascript
复制
$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);

我不认为这是低效的。

编辑附加内容:如果您百分之百确定$Arr2只包含可以在$Arr1中找到的代码,那么您当然可以跳过isset()测试。

票数 4
EN

Stack Overflow用户

发布于 2012-07-25 15:40:17

我想这会有帮助的。下面是一个函数key_values_intersect,它将按照您的预期工作:)

代码语言:javascript
复制
$longcodes = array(
    'AF' => 'AFGHANISTAN',
    'AL' => 'ALBANIA',
    'DZ' => 'ALGERIA',
    'AS' => 'AMERICAN SAMOA',
);

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

function key_values_intersect($haystack, $needle)
{
    $tmp=array();
    foreach ($needle AS $key) {
        $tmp[$key] = $haystack[$key];
    }
    return $tmp;
}


print_r(key_values_intersect($longcodes,$code));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11644267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档