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

5

我希望有一种快捷简单的方法来复制数组,但又能够指定要复制的数组键。

我可以轻松编写一个函数来实现此功能,但我想知道是否已经有 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

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);
 ?>

$result将包含以下内容:

    Array (
        [small] => 10px
        [large] => 13px
    );

1
感谢您的回复。构建数组的稍微更好的方法: $selected = array_fill_keys('small', 'large', null);虽然它仍然不是非常优雅。但我认为编写“array_from_keys”函数仍然值得一试。 - bradt

6
我所知道的是,没有这样的功能。最简单的方法可能是像这样做:
$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');

你发布的第一个解决方案是整个“线程”中最好的一个 :) - Ivan Vučica

1

简单方法:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接