Массив пересекается по ключу в массиве? - программирование
Подтвердить что ты не робот

Массив пересекается по ключу в массиве?

У меня есть массив, в котором есть страны:

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() для каждого ключа, но это кажется действительно неэффективным...

4b9b3361

Ответ 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% уверены, что $Arr2 содержит только коды, которые можно найти в $Arr1, вы можете, конечно, пропустить тест isset().

Ответ 3

Я думаю, это поможет. Вот функция 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));

Ответ 4

Если я правильно понял, у вас есть множество стран и массив необходимых стран, и вы хотите создать массив с необходимыми странами. Если это, то вы можете попробовать следующее:

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