通过键获取数组值
我正在寻找一个内置的PHP函数,将键数组作为input,并返回相应的值。
例如,我有一个下面的数组
$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400);
我需要key2和key4的值,所以我有另一个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()时将被覆盖,因为显然数组索引是唯一的。
而第二种方法不会发生这种情况,因为没有翻转,所以适用于某些情况。