我正在寻找一个内置的php函数,它将一组键作为输入并返回相应的值。
例如我有一个以下数组
$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400);
我需要键 key2 和 key4 的值,所以我有另一个array("key2", "key4")
我需要一个函数,它将此数组和第一个数组作为输入,并在响应中提供值。因此响应将为array(200, 400)
答案 0 :(得分:113)
我认为您正在搜索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。
答案 1 :(得分:16)
另一个答案:
$keys = array("key2", "key4");
return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys);
答案 2 :(得分:4)
foreach($input_arr as $key) {
$output_arr[] = $mapping[$key];
}
根据$output_arr
中的key->值映射,这将导致$input_arr
的值与$mapping
中的键列表相对应。如果需要,可以将其包装在一个函数中:
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)
答案 3 :(得分:4)
值得提出的解决方案之一是使用array_intersect_key(),如果第二个参数具有重复值,则在传递给array_flip()时会覆盖它们,因为很明显,数组索引是唯一的。
第二种方法不会发生这种情况,因为没有翻转,因此适合某些情况。