按键获取数组值

时间:2010-11-21 20:20:43

标签: php arrays

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

例如我有一个以下数组

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

我需要键 key2 key4 的值,所以我有另一个array("key2", "key4") 我需要一个函数,它将此数组和第一个数组作为输入,并在响应中提供值。因此响应将为array(200, 400)

4 个答案:

答案 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()时会覆盖它们,因为很明显,数组索引是唯一的。

第二种方法不会发生这种情况,因为没有翻转,因此适合某些情况。