Получите часть массива

У меня есть массив:

$array = array(
  'key1' => 'value1',
  'key2' => 'value2',
  'key3' => 'value3',
  'key4' => 'value4',
  'key5' => 'value5',
);

и я хотел бы получить часть его с указанными ключами - например, key2, key4, key5.

Ожидаемый результат:

$result = array(
  'key2' => 'value2',
  'key4' => 'value4',
  'key5' => 'value5',
);

Что самый быстрый путь состоит в том, чтобы сделать это?

7
задан SilentGhost 25 January 2010 в 13:14
поделиться

3 ответа

Вам нужна функция array_intersect_key :

$result = array_intersect_key($array, array('key2'=>1, 'key4'=>1, 'key5'=>1));

Также array_flip может помочь, если ваши ключи находятся в массиве в виде значений:

$result = array_intersect_key(
    $array, 
    array_flip(array('key2', 'key4', 'key5'))
);
16
ответ дан 6 December 2019 в 08:43
поделиться

Вы можете использовать array_intersect_key и array_fill_keys для этого:

$keys = array('key2', 'key4', 'key5');
$result = array_intersect_key($array, array_fill_keys($keys, null));

array_flip вместо Array_fill_keys также будет работать:

$keys = array('key2', 'key4', 'key5');
$result = array_intersect_key($array, array_flip($keys));
5
ответ дан 6 December 2019 в 08:43
поделиться

Единственный способ, который я вижу - это итерация массива и построение нового массива.

Либо пройдитесь по массиву с помощью array_walk и сконструируйте новый, либо создайте соответствующий массив и используйте array_intersect_key и др.

.
0
ответ дан 6 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: