我正在寻找一个内置的PHP函数,它将数组键作为输入并返回相应的值.
例如,我有一个以下数组
$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400);
Run Code Online (Sandbox Code Playgroud)
我需要键key2和key4的值,所以我有另一个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.
小智 17
另一种答案:
$keys = array("key2", "key4");
return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys);
Run Code Online (Sandbox Code Playgroud)
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)