Ответ 1
$selection = array('AL', 'DZ');
$filtered = array_intersect_key($countries, array_flip($selection));
var_dump($filtered);
У меня есть массив, в котором есть страны:
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()
для каждого ключа, но это кажется действительно неэффективным...
$selection = array('AL', 'DZ');
$filtered = array_intersect_key($countries, array_flip($selection));
var_dump($filtered);
Просто зациклируйте над 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().
Я думаю, это поможет. Вот функция 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));
Если я правильно понял, у вас есть множество стран и массив необходимых стран, и вы хотите создать массив с необходимыми странами. Если это, то вы можете попробовать следующее:
$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);