我有一个包含国家/地区的数组:
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()
检查,但这看起来真的很无效......
答案 0 :(得分:42)
$selection = array('AL', 'DZ');
$filtered = array_intersect_key($countries, array_flip($selection));
var_dump($filtered);
答案 1 :(得分:4)
只需循环遍历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%确定$ Arr2只包含可以在$ Arr1中找到的代码,你当然可以跳过isset()测试。
答案 2 :(得分:-1)
我认为这会有所帮助。这是一个函数key_values_intersect,可以按预期工作:)
$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));
答案 3 :(得分:-2)
如果我理解正确您拥有一系列国家和一系列所需国家,并且您想要创建所需国家/地区的阵列。如果那样,那么你可以试试这个:
$countries = array ("AF"=>"AFGJANISTAN", "AL"=>"ALBANIA", "LV"=>"LATVIA", "USA"=>"UNITED STATES OF AMERICA");
$needed = array ("AF", "AL");
$result = array ();
foreach ($needed as $row) {
if (in_array($row, $contries)) {
$result[] = $countries[$row];
}
}
var_dump($result);