通过键获取数组值

我正在寻找一个内置的PHP函数,将键数组作为input,并返回相应的值。

例如,我有一个下面的数组

$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400); 

我需要key2key4的值,所以我有另一个array("key2", "key4")我需要一个函数,这个数组和第一个数组作为input,并提供我的价值作为回应。 所以响应将是array(200, 400)

我想你正在寻找array_intersect_key 。 例:

 array_intersect_key(array('a' => 1, 'b' => 3, 'c' => 5), array_flip(array('a', 'c'))); 

会返回:

 array('a' => 1, 'c' => 5); 

你可以使用array('a' => '', 'c' => '')而不是array_flip(...)如果你想有一个简单的代码。

注意数组键被保存。 如果你需要一个顺序数组,你应该使用array_values 。

另一个答案是:

 $keys = array("key2", "key4"); return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys); 
 foreach($input_arr as $key) { $output_arr[] = $mapping[$key]; } 

根据$mapping的key-> value映射,这将导致$output_arr具有与$output_arr中的键列表相对应的值。 如果你想,你可以把它包装在一个函数中:

 function get_values_for_keys($mapping, $keys) { foreach($keys as $key) { $output_arr[] = $mapping[$key]; } return $output_arr; } 

那么你可以这么称呼它:

 $a = array('a' => 1, 'b' => 2, 'c' => 3); $values = get_values_for_keys($a, array('a', 'c')); // $values is now array(1, 3) 

值得提出的解决scheme的一个考虑因素是使用array_intersect_key(),如果第二个参数具有重复值,则在传递给array_flip()时将被覆盖,因为显然数组索引是唯一的。

而第二种方法不会发生这种情况,因为没有翻转,所以适用于某些情况。