Создать новый массив из списка ключей в PHP - PullRequest
5 голосов
/ 02 июня 2009

Я хочу быстрый простой способ скопировать массив, но возможность указать, какие ключи в массиве я хочу скопировать.

Я могу легко написать функцию для этого, но мне интересно, есть ли функция PHP, которая уже делает это. Что-то вроде функции array_from_keys() ниже.

$sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');

$chosen = array_from_keys($sizes, 'small', 'large');

// $chosen = array('small' => '10px', 'large' => '13px');

Ответы [ 3 ]

9 голосов
/ 02 июня 2009

В PHP есть встроенная функция, которая позволяет такие манипуляции, т.е. array_intersect_key, однако вам придется немного изменить свой синтаксис.

 <?php
      $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
      $selected = array_fill_keys(array('small', 'large'), null); 
      $result = array_intersect_key($sizes, $selected);
 ?>

$ результат будет содержать:

    Array (
        [small] => 10px
        [large] => 13px
    );
5 голосов
/ 02 июня 2009

Насколько я знаю, для этого нет функции. Я думаю, что проще всего было бы сделать что-то вроде этого:

$chosen = array_intersect_key($sizes, array_flip(array('small', 'large')));  

Или, как вы говорите, вы можете легко написать функцию:

function array_from_keys() {
    $params = func_get_args();
    $array = array_shift($params);
    return array_intersect_key($array, array_flip($params));
}

$chosen = array_from_keys($sizes, 'small', 'large');
1 голос
/ 02 июня 2009

Простой подход:

$sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
$chosen = array("small", "large");
$new = array();

foreach ($chosen as $key)
  $new[$key] = $sizes[$key];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...