在PHP中从键列表创建新数组

在PHP中从键列表创建新数组,php,arrays,Php,Arrays,我想要一种快速简单的方法来复制数组,但是能够指定要复制数组中的哪些键 我可以很容易地为此编写一个函数,但我想知道是否有一个PHP函数已经完成了这项工作。类似于下面的array\u from\u keys()函数 $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px'); $chosen = array_from_keys($sizes, 'small', 'large'); // $ch

我想要一种快速简单的方法来复制数组,但是能够指定要复制数组中的哪些键

我可以很容易地为此编写一个函数,但我想知道是否有一个PHP函数已经完成了这项工作。类似于下面的
array\u from\u keys()
函数

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

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

// $chosen = array('small' => '10px', 'large' => '13px');
简单方法:

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

foreach ($chosen as $key)
  $new[$key] = $sizes[$key];

PHP中有一个本机函数允许此类操作,即
array\u intersect\u key
,但是您必须稍微修改一下语法

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

据我所知,没有这个函数。最简单的方法是这样做,我认为:

$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');

您发布的第一个解决方案是整个“线程”中最好的解决方案:)谢谢。构建数组的更好方法:$selected=array\u fill\u key('small','large',null);虽然还不是很优雅。我认为仍然值得编写“array\u from\u keys”函数。
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');