Reputation: 92601
I have an array that has countries:
array(
'AF' => 'AFGHANISTAN',
'AL' => 'ALBANIA',
'DZ' => 'ALGERIA',
'AS' => 'AMERICAN SAMOA',
);
and I have another array that has some of the keys in it
array('AL', 'DZ');
I want to call a function that will take both arrays as parameters and return
array(
'AL' => 'ALBANIA',
'DZ' => 'ALGERIA',
);
I know php has built in functions to compare the keys, or the values, but it seems those functions all expect you to have two 1D arrays or two 2D arrays.
I could loop over array_keys()
for the first array and do a in_array()
check on each key, but that seems really inefficient.
Upvotes: 21
Views: 10183
Reputation: 49
I think this will help. Here is a function key_values_intersect that will work as you expected :)
$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));
Upvotes: -1
Reputation: 522210
$selection = array('AL', 'DZ');
$filtered = array_intersect_key($countries, array_flip($selection));
var_dump($filtered);
Upvotes: 49
Reputation: 2408
Simply loop over the SECOND array, and fetch the values from the first. Vise versa seems unneeded inefficient indeed.
So:
$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);
I don't think that is inefficient.
Edit addition: If you are 100% sure the $Arr2 contains only codes that can be found in $Arr1, you can of course skip the isset() test.
Upvotes: 4
Reputation: 1258
If I understood correctly You have array of countries and array of needed countries and You want to create array with needed countries. If that, then You can try this:
$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);
Upvotes: -2