Подтвердить что ты не робот

Получить значения массива ключами

Я ищу встроенную функцию php, которая принимает массив ключей в качестве входных данных и возвращает мне соответствующие значения.

например. У меня есть следующий массив

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

и мне нужны значения для клавиш key2 и key4, поэтому у меня есть еще один array("key2", "key4") Мне нужна функция, которая принимает этот массив и первый массив в качестве входных данных и дает мне значения в ответ. Таким образом, ответ будет array(200, 400)

4b9b3361

Ответ 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(), потому что, очевидно, индексы массивов уникальны.

И это не происходит со вторым подходом, потому что нет переворота, что делает его подходящим для определенных случаев.