按键获取数组值

Aya*_*avi 60 php arrays

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

例如,我有一个以下数组

$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400);
Run Code Online (Sandbox Code Playgroud)

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

And*_*rew 120

我想你正在搜索array_intersect_key.例:

array_intersect_key(array('a' => 1, 'b' => 3, 'c' => 5), 
                    array_flip(array('a', 'c')));
Run Code Online (Sandbox Code Playgroud)

会回来:

array('a' => 1, 'c' => 5);
Run Code Online (Sandbox Code Playgroud)

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

请注意,数组键是保留的.如果需要顺序数组,则应在之后使用array_values.

  • @Amber,如果它返回`array(0 => 100,1 => 400)`或`array('key2'=> 200,'key4'=> 400),真的很重要吗?但无论如何,如果生成的数组不应该显示原始键,只需将一个衬里包装在`array_values()中即可. (4认同)
  • 注意,这会返回一个关联数组(所以在OP的例子中,它不会返回`array(200,400)`,而是`array('key2'=> 200,'key4'=> 400)`. (2认同)

小智 17

另一种答案:

$keys = array("key2", "key4");

return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys);
Run Code Online (Sandbox Code Playgroud)


Amb*_*ber 7

foreach($input_arr as $key) {
    $output_arr[] = $mapping[$key];
}
Run Code Online (Sandbox Code Playgroud)

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

function get_values_for_keys($mapping, $keys) {
    foreach($keys as $key) {
        $output_arr[] = $mapping[$key];
    }
    return $output_arr;
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以这样称呼它:

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