Получить значения массива ключами
Я ищу встроенную функцию php, которая принимает массив ключей в качестве входных данных и возвращает мне соответствующие значения.
например. У меня есть следующий массив
$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400);
и мне нужны значения для клавиш key2 и key4, поэтому у меня есть еще один array("key2", "key4")
Мне нужна функция, которая принимает этот массив и первый массив в качестве входных данных и дает мне значения в ответ. Таким образом, ответ будет array(200, 400)
Ответы
Ответ 1
Я думаю, что вы ищете 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, если вам нужен последовательный массив.
Ответ 2
Альтернативный ответ:
$keys = array("key2", "key4");
return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys);
Ответ 3
foreach($input_arr as $key) {
$output_arr[] = $mapping[$key];
}
Это приведет к тому, что $output_arr
будет иметь значения, соответствующие списку ключей в $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)
Ответ 4
Одним из соображений, которые стоит сделать в отношении представленных решений, является использование array_intersect_key(), если второй аргумент имеет дублированные значения, они будут перезаписаны при передаче в array_flip(), потому что, очевидно, индексы массивов уникальны.
И это не происходит со вторым подходом, потому что нет переворота, что делает его подходящим для определенных случаев.